【Android】EditText下拉菜单ListPopupWindow

demo里面默认了三个没规律的用户名,产品觉得输入太麻烦了,让做个下拉列表,选择。样式如下~

【Android】EditText下拉菜单ListPopupWindow_第1张图片

①xml文件,中需要下拉菜单的EditText

②在LoginAcitivity中,对EditText的触摸事件进行监听,当ACTION_UP事件发生时,判断事件发生的位置,用EditText控件的宽度-EditText右侧drawable的宽度;当触摸位置的横坐标大于这个长度时,可以判断发生了点击 down 图标事件。

private EditText logId;
logId = (EditText) findViewById(R.id.login_id);
logId.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                final int DRAWABLE_LEFT = 0;
                final int DRAWABLE_TOP = 1;
                final int DRAWABLE_RIGHT = 2;
                final int DRAWABLE_BOTTOM = 3;
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    if (event.getX() >= (logId.getWidth() - logId
                            .getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                        logId.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.drawable.down), null);
                        showListPopulWindow();
                        return true;
                    }
                }
                return false;
            }
        });

③或者,觉得右边的按键很丑,可以对EditText的焦点获取进行监听,当它获取到焦点,就执行showListPopWindow()方法。这样的话可以去掉xml中的drawableRight。

logId.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if(b){
                    showListPopulWindow();
                }
            }
        });

④showListPopWindow()方法

private void showListPopulWindow() {
        final String[] list = {"crab0314", "lsmhfz", "daoyuan3"};//要填充的数据
        final ListPopupWindow listPopupWindow;
        listPopupWindow = new ListPopupWindow(LoginActivity.this);
        listPopupWindow.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1, list));//用android内置布局,或设计自己的样式
        listPopupWindow.setAnchorView(logId);//以哪个控件为基准,在该处以logId为基准
        listPopupWindow.setModal(true);

        listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置项点击监听
            @Override
            public void onItemClick(AdapterView adapterView, View view, int i, long l) {
                logId.setText(list[i]);//把选择的选项内容展示在EditText上
                listPopupWindow.dismiss();//如果已经选择了,隐藏起来
            }
        });
        listPopupWindow.show();//把ListPopWindow展示出来
    }

你可能感兴趣的:(Android开发)