ListPopupWindow的学习和使用

这一段时间在做一个app主要是与加油机通讯。里面涉及到EditView的下拉框问题,经过百般的思考和摸索终于实现下拉框。并且动态更改右边的小图标。如图所示

效果很nice,我觉得我得记录下来,免得我忘了,这个功能主要用到的是ListPopupWindow,请看代码

private void setListPopupWindow(final EditText mEditText1,final EditText mEditText_type, final ListPopupWindow mListPop, final List<Map<String,String>> list1){

    mListPop.setAdapter(new ArrayAdapter<Map<String,String>>(this, android.R.layout.simple_expandable_list_item_1, list1));//适配,直接匿名内部类
    mListPop.setWidth(840);//宽度
    mListPop.setHeight(620);//高度
    mListPop.setModal(true);//设置是否是模式
    mListPop.setDropDownGravity(Gravity.LEFT);//对齐模式,左对齐
    mListPop.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this,R.color.mintcream)));//设置背景色
    mListPop.setAnchorView(mEditText1);//设置ListPopupWindow的锚点,即关联PopupWindow的显示位置和这个锚点
    mListPop.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            mEditText1.setText(list1.get(position).toString());
            String type = mEditText_type.getText().toString().trim();
            if(type.equals("1")){//如果状态为1则表明关闭
                mEditText1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.mipmap.on), null);
                mListPop.show();
                mEditText_type.setText("0");
            }else {
                mEditText1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.mipmap.down), null);
                mListPop.dismiss();
                mEditText_type.setText("1");

            }
        }
    });
    mListPop.setOnDismissListener(new PopupWindow.OnDismissListener() {//监听弹出框是否存在,用于判断右边的图标是否变化
        @Override
        public void onDismiss() {
            mEditText1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.mipmap.down), null);
            mEditText_type.setText("1");
        }
    });
}

ListPopupWindow是在参照控件下方显示列表窗口,不同的是,它在展示上更加灵活,开发者可以自定义列表弹窗的大小与样式。 
这是ListPopupWindow的常用方法说明: 
setAdapter : 设置下拉列表的数据适配器,指定主题。 
setModal : 设置显示模式。通常设置为true。  
setAnchorView : 设置下拉列表的参照控件。下拉列表在显示时将展现在参照控件的下方,注意:如果不设置参照控件就直接调用show函数,系统不知道要把下拉列表在何处展示,只能是异常退出了。 
setDropDownGravity : 设置下拉列表的对齐方式。Gravity.START表示与参照控件左侧对齐,Gravity.END表示与参照控件右侧对齐。注意:该函数只在4.4.2及以上版本中使用。 
setOnItemClickListener : 设置列表项的点击监听器。 
show : 显示下拉列表窗口。 
dismiss : 关闭下拉列表窗口。 
setOnDismissListener : 设置下拉列表的关闭监听器。

ListPopupWindow与EditText结合使用,效果上有点类似AutoCompleteTextView,即都会在编辑框下方弹出文本列表可供选择。但它们之间也有明显的区别:AutoCompleteTextView一旦设置适配器,则它会根据编辑框的文本来自动调整文本列表;而ListPopupWindow的文本列表是固定的,不会自动调整。

网上也搜了点,自己也理解了点,安卓开发之路任重而道远,只要细心,一切都不是问题。写这篇文章是给我自己写的,不要浮躁,不要只停留在表面。 

发布了22 篇原创文章 · 获赞 4 · 访问量 4337

猜你喜欢

转载自blog.csdn.net/qq_38366111/article/details/86603963