Dialog实现Spinner下拉列表效果

本文详细记录了如何实现一种比Spinner效果更好的替代方案,并包括Dialog弹出位置设定的优化,涉及ListView、Adapter和Dialog的使用。

    

先看下效果,我感觉比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);获取的是距离屏幕顶端的位置,所以还要获取状态栏的高度,减去这个高度才可以正确显示在我们需要的位置。

从宏观尺度刻画中国山地空间格局和复杂形态特征,其中包含我国山地分布、山地分类、形态要素与山地面积比例等信息,是山地区划、山地成因分类及资源环境关联分析的基础数据。山地承载着巨大的自然资源供给、生态服务与调节功能,在我国生态文明建设和社会经济发展中有着重要的地位和作用。前期,中国科学院、水利部成都山地灾害与环境研究所的李爱农研究员等,在中国山地空间范围定量界定、山地起伏度计算尺度分析及地形自适应算法、山地综合制图等研究的基础上,形成了“中国数字山地图”数据集,具体包括:(1)中国山地空间范围数据(2)中国山地类型数据(3)山脉数据(山脉走向、等级与山脊形态)(4)山峰数据(5)山地面积按一级行政区统计表(6)中国地势等高面数据(7)山地形成类型分区数据(8)中国山地分区数据(9)主要山峰列表山地空间界定范围与分类的原始DEM空间分辨率约90m,数据边界已套合中高分辨遥感影像做必要的修订,与山地地形晕渲图有良好的空间一致性;山脉走向与山地散列要素的制图综合精度为1∶100万,为定性的辅助数据。该数据集将山地从地貌制图中单独列出,具有更高的空间分辨率和针对性,可为山地环境及山地灾害地带性研究、山区国土空间分析等提供可靠的本底数据,服务于我国面向山区的宏观决策。## 二、 数据文件命名方式和使用方法(1)中国山地空间范围数据,文件名为“CN_MountainDistribution.shp”,可用ArcMap打开;(2)中国山地类型数据,文件名为“CN_MountainClassification.shp”,可用ArcMap打开,其中,山地类型设色文件“CN_MountainClassification.lyr”可用于ArcMap10.6或更高版本;(3)中国主要山脉数据,文件名为“CN_MountainRanges.shp”,可用ArcMap打开;(4)山峰数据,文件名为"MainMountianPeaks.shp",可用ArcMap打开;(5)山地面积按一级行政区统计表,文件名为"CN_MountainAreaStatistics.docx",可用office word等打开;(6)中国地势等高面分区数据,文件名为“CN_ContourPlane.shp”,可用ArcMap打开;(7)山地形成类型分区数据,文件名为“CN_MountainTectonicGenesis”,可用ArcMap打开;(8)中国山地分区数据,文件名为"CN_MountainDivisionAndZoning.shp",可用ArcMap打开;(9)主要山峰f列表,文件名为”MountainList.xlsx“,可用office excel等打开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值