这一段时间在做一个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的文本列表是固定的,不会自动调整。
网上也搜了点,自己也理解了点,安卓开发之路任重而道远,只要细心,一切都不是问题。写这篇文章是给我自己写的,不要浮躁,不要只停留在表面。