用popupWindow嵌套listView做下拉按钮

22 篇文章 1 订阅

效果展示:

 

 一、自定义布局:

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;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

休以希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值