Dialog实现Spinner下拉列表效果

    

先看下效果,我感觉比Spinner效果要好些,记录下实现过程。

    

final String[] levelArray = getResources().getStringArray(R.array.contact_level);
		re_layout_spinner.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (!isExpand) {
					dialog = new Dialog(mSelf);
					dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
					ListView mListView = new ListView(mSelf);
					mListView.setCacheColorHint(Color.TRANSPARENT);
					mListView.setAdapter(new LevelAdapter());
					mListView.setBackgroundResource(R.drawable.information_blue_bg);
					mListView.setOnItemClickListener(new OnItemClickListener() {

						@Override
						public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
							// TODO Auto-generated method stub
							tv_level.setText(levelArray[position]);
							if (dialog != null) {
								dialog.dismiss();
								dialog = null;
								isExpand = false;
							}
						}
					});
					dialog.setContentView(mListView);
					dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

						@Override
						public void onDismiss(DialogInterface dialog) {
							// TODO Auto-generated method stub
							isExpand = false;
						}
					});
					Window dialogWindow = dialog.getWindow();
					dialogWindow.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.RED));
					dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);
					WindowManager.LayoutParams lp = dialogWindow.getAttributes();
					lp.dimAmount = 0f;
					int[] location = new int[2];
					re_layout_spinner.getLocationOnScreen(location);
					Rect out = new Rect();
					re_layout_spinner.getWindowVisibleDisplayFrame(out);
					lp.x = location[0];
					lp.y = location[1] - out.top + re_layout_spinner.getHeight();
					lp.width = re_layout_spinner.getWidth();
					lp.height = LayoutParams.WRAP_CONTENT;
					dialogWindow.setAttributes(lp);
					dialog.show();
					isExpand = true;
				} else {
					if (dialog != null) {
						dialog.dismiss();
						dialog = null;
					}
				}
			}
		});

new LevelAdapter()中就放了一个TextView,其他需要说下的是Dialog弹出位置的设定,我想让它贴着我的RelativeLayout出现就要获取这个RelativeLayout的位置,而re_layout_spinner.getLocationOnScreen(location);获取的是距离屏幕顶端的位置,所以还要获取状态栏的高度,减去这个高度才可以正确显示在我们需要的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值