美文网首页我爱编程android 技术知识
android 在PopupWindow中使用ListView做

android 在PopupWindow中使用ListView做

作者: 追梦小乐 | 来源:发表于2018-06-21 14:33 被阅读14次

    效果图如下所示

    image.png image.png

    PopupWindow布局:layout_insurance_list_pop_up.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        android:id="@+id/llt_root"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/subtransparent"
        android:gravity="bottom"
        android:orientation="vertical"
        >
    
        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:divider="@null"
            android:listSelector="@color/transparent"
            android:paddingEnd="@dimen/dimen_10"
            android:paddingStart="@dimen/dimen_10"
            android:scrollbars="none">
        </ListView>
    
    </LinearLayout>
    

    ListView列表Item布局:layout_item_insurance_list.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dimen_30"
        android:layout_marginBottom="@dimen/dimen_30"
        >
    
        <TextView
            android:layout_gravity="center"
            android:paddingTop="@dimen/dimen_15"
            android:paddingBottom="@dimen/dimen_15"
            android:id="@+id/tv_insurance"
            style="@style/text_black_45"
            tools:text="@string/app_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    

    适配器Adapter:InsurancePopupWindowAdapter.java文件

    public class InsurancePopupWindowAdapter extends BaseAdapter {
    
        private Context mContext;
        private List<SysBean> mData;
        private final LayoutInflater inflater;
    
        public InsurancePopupWindowAdapter(Context context,List<SysBean> mData){
            this.mContext = context;
            this.mData = mData;
            inflater = LayoutInflater.from(mContext);
        }
    
        @Override
        public int getCount() {
            return mData != null ? mData.size() : 0;
        }
    
        @Override
        public Object getItem(int position) {
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = inflater.inflate(R.layout.layout_item_insurance_list, null);
                holder.tvName =  (TextView) convertView.findViewById(R.id.tv_insurance);
                convertView.setTag(holder);
            }else {
                holder = (ViewHolder)convertView.getTag();
            }
    
            SysBean bean = mData.get(position);
    
            holder.tvName.setText(bean.name);
    
            return convertView;
        }
    
    
        final class ViewHolder{
            public  TextView tvName;
        }
    
    }
    

    调用方式

    private void showPopup() {
            View view = LayoutInflater.from(this).inflate(R.layout.layout_insurance_list_pop_up,null);//PopupWindow对象
            listView = (ListView)view.findViewById(R.id.lv);
            View rootView  = (LinearLayout)view.findViewById(R.id.llt_root);
            listView.setAdapter(adapter);
            if (popupWindow != null){
                popupWindow = null;
            }
    
            //初始化PopupWindow对象
            popupWindow=new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT);
            popupWindow.setOutsideTouchable(true);
            popupWindow.setFocusable(true);
            popupWindow.setBackgroundDrawable(new ColorDrawable());
            // 设置滑入滑出的动画效果
            popupWindow.setAnimationStyle(R.style.style_pop_up_window2);
    
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    SysBean bean = sysBeanList.get(i);
                    if (bean != null){
                        tvInsurane.setText(!TextUtils.isEmpty(bean.name)?bean.name:"");
                    }
                    if (popupWindow != null && popupWindow.isShowing()){
                        popupWindow.dismiss();
                    }
                }
            });
    
    
            //点击外面让popupwindow消失
            rootView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    if (popupWindow != null && popupWindow.isShowing()){
                        popupWindow.dismiss();
                    }
                    return false;
                }
            });
    
            //让popupwindow在底部显示
            popupWindow.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
        }
    

    相关文章

      网友评论

        本文标题:android 在PopupWindow中使用ListView做

        本文链接:https://www.haomeiwen.com/subject/npwqyftx.html