android 在PopupWindow中使用ListView做下拉选择功能

效果图如下所示

《android 在PopupWindow中使用ListView做下拉选择功能》 image.png
《android 在PopupWindow中使用ListView做下拉选择功能》 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);
    }
    原文作者:追梦小乐
    原文地址: https://www.jianshu.com/p/9fb90e312cb7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞