Android 下拉选择框自定义view

首先来看一下实现的效果

Android 下拉选择框自定义view_第1张图片

基本思路:继承PopupWindow的自定义View

说明:下图这部分自己布局,本文中主要说明的是点击某个分类显示的下拉实现

第一步:自定义 SpinnerPopuwindow继承PopupWindow


/**
 * Created by sws on 2019-04-28.
 * from:
 * describe:
 */

public class SpinnerPopuwindow extends PopupWindow {

    private View conentView;
    private ListView listView;
    private SpinnerPopAdapter adapter;
    private Activity context;
    private TextView pop_title;
    private TextView pop_cancel;
    /**
     * @param context 上下文
     * @param string 获取到未打开列表时显示的值
     * @param list 需要显示的列表的集合
     * @param itemsOnClick listview在activity中的点击监听事件
     */
    @SuppressLint("InflateParams")
    public SpinnerPopuwindow(final Activity context, final String string, final List list, AdapterView.OnItemClickListener itemsOnClick) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.context =context;
        conentView = inflater.inflate(R.layout.popuwindow_spinner, null);
        // 设置SelectPicPopupWindow的View
        this.setContentView(conentView);
        // 设置SelectPicPopupWindow弹出窗体的宽
        this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        //    this.setWidth(view.getWidth());
        // 设置SelectPicPopupWindow弹出窗体的高
        this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        // 设置SelectPicPopupWindow弹出窗体可点击
        this.setFocusable(true);
        // 刷新状态
        this.update();
        this.setOutsideTouchable(false);
        // 实例化一个ColorDrawable颜色为半透明
        ColorDrawable dw = new ColorDrawable(0000000000);
        // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
        this.setBackgroundDrawable(dw);
        this.setOnDismissListener(new OnDismissListener() {
            @Override
            public void onDismiss() {
                darkenBackground(1f);
            }
        });
        //解决软键盘挡住弹窗问题
        this.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED);
        this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

        // 设置SelectPicPopupWindow弹出窗体动画效果
        //  this.setAnimationStyle(R.style.AnimationPreview);

        adapter = new SpinnerPopAdapter(context,list);
        listView = (ListView) conentView.findViewById(R.id.listView);
        listView.setOnItemClickListener(itemsOnClick);
        listView.setAdapter(adapter);
        // setAdapter是异步进行的,为了使弹窗能即时刷新,所以使用post+Runnable
        listView.post(new Runnable() {
            @Override
            public void run() {
                //主要是为了比对未打开列表时显示的值和列表中的值进行默认选中
                for(int j = 0;j

 本类中主要是创建一个PopupWindow,并编写他的显示、关闭,点击监听,设置标题等方法,你可以按照你的需求更改背景颜色、弹出窗体的宽高等。

需要用到的列表布局如下 :一个简单的listview和标题TextView



    

    
    
    

 第二步:在要使用下拉列表的Activity中创建

 

/** 项目类型数据*/
private List lxData;

private SpinnerPopuwindow lxSpinnerPopuwindow;


//在页面上项目类型按钮的点击监听中加一下代码

type_lx = tvlx.getText().toString();
                lxSpinnerPopuwindow = new SpinnerPopuwindow( StreetDeviceListActivity.this,type_lx,lxData,lxitemsOnClick);
//type_lx:选择某一项后显示选中内容的TextView
                lxSpinnerPopuwindow.showPopupWindow(llSX);//llSX是指此下拉列表要显示在那个view下边
                lxSpinnerPopuwindow.setTitleText("项目类型");//给下拉列表设置标题

第三步:为下拉列表设置监听

 private AdapterView.OnItemClickListener lxitemsOnClick = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            String value = lxData.get(lxSpinnerPopuwindow.getText());
            tvlx.setText(value);
            lxSpinnerPopuwindow.dismissPopupWindow();

           //TODO 这儿写点击某一项之后你要执行的代码

        }
    };

 

你可能感兴趣的:(Android 下拉选择框自定义view)