效果展示:
一、自定义布局:
1、设置输入框:
2、下拉按钮:
放置在输入框的边上
二、代码处理动画:
1、初始化一些数据:
2、获取对应的控件:
3、给下拉按钮添加监听事件:
*当点击按钮的时候,弹出列表:
*使用PopupWindow:在其中显示listView,设置宽高,并指定是否获取焦点
在下拉按钮的监听器的onClick方法中:
①创建ListView,填充数据
*创建ListView,传入上下文对象给其构造函数
*设置ListView的适配器:listView.setAdapter(adapter)
*设置ListView不需要缓冲色:listView.setCacheColorHint(0x00000000)
*设置ListView不显示滚动条:listView.setVerticalScrollBarEnabled(false)
②显示出列表:
创建PopupWindow,设置listView,宽高,是否获取焦点等
设置popupWindow的背景:popupWindow.setBackgroundDrawable(….)
显示popupWindow:popupWindow.showAsDropDown()
listView的适配器:
在getView方法中:
1、填充item
不使用View.inflater进行填充,使用布局加载器LayoutInflater,可以根据item的高度进行填充显示
2、获取到编辑框和删除按钮
①设置编辑框(qq号)的点击事件
设置文本,并让popupWindow隐藏
②设置删除按钮的点击事件:
从集合中移除对应删除的qq号,并进行更新数据
示例代码:
public class MainActivity extends Activity {
private List<String> qqNames;
private ImageButton ib_spinner;
private EditText et_name;
private PopupWindow pop;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
//填充数据
private void initData() {
qqNames = new ArrayList<String>();
for (int i = 10000; i < 10030; i++) {
qqNames.add(i+"");
}
}
//初始化控件
private void initView() {
ib_spinner = (ImageButton) findViewById(R.id.ib_spinner);
et_name = (EditText) findViewById(R.id.et_name);
ib_spinner.setOnClickListener(new MyOnClickListener());
}
//设置下拉按钮的监听器
private class MyOnClickListener implements OnClickListener{
public void onClick(View v) {
//创建listview
ListView lv = new ListView(getApplicationContext());
adapter = new MyAdapter();
//设置listview的适配器
lv.setAdapter(adapter);
lv.setCacheColorHint(0x00000000);
lv.setVerticalScrollBarEnabled(false);
//显示下拉列表
pop = new PopupWindow(lv, et_name.getWidth(), LayoutParams.WRAP_CONTENT, true);
pop.setBackgroundDrawable(new ColorDrawable(0x00000000));
pop.showAsDropDown(et_name, 0, -5);
}
}
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return qqNames.size();
}
@Override
public Object getItem(int position) {
return qqNames.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
View view = inflater.inflate(R.layout.item, parent, false);
//获取文本框控件,设置其内容及监听事件
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_name.setText(qqNames.get(position));
tv_name.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
et_name.setText(qqNames.get(position));
pop.dismiss();
}
});
//获取删除按钮
ImageButton ib_delete = (ImageButton) view.findViewById(R.id.ib_delete);
ib_delete.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
qqNames.remove(position);
adapter.notifyDataSetChanged();
}
});
return view;
}
}
}