ListPopupWindow的学习和使用

本文详细介绍了如何在安卓应用中实现EditView的下拉框功能,并通过ListPopupWindow动态更改右侧图标,提供了具体代码示例及功能解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一段时间在做一个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的文本列表是固定的,不会自动调整。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值