Dialog中使用的ListView自适应

Home / Android MrLee 2018-4-1 4554


今天在开发当中遇到一个问题:自定义的Dialog当中使用的ListView来显示数据,然而ListView要显示的数据太多,

我并没有在Dialog的布局文件当中把ListView的高度设置固定,而是使用包裹内容(wrapcontent),这样就会使Dialog太长。

· 遇到这个问题,先是固定Dialog的长度,固定长度后,发现没有了取消和确定按钮,才知道是直接把下面的截掉了;

后面接着将ListView修改为自适应,解决问题!

         

在这里只给了方法,有不对的可以自己修改修改:

	/**
	 * 设置Dialog的大小和Dialog中ListView的自适应
	 * @param dialog 对话框
	 * @param list 对话框中的ListView
	 */
	public void setDialog(Dialog dialog,ListView list) {
		if (dialog != null) {
			//得到当前dialog对应的窗体
			Window dialogWindow = dialog.getWindow();
			//管理器
			WindowManager m = ((Activity) context).getWindowManager();
			//屏幕分辨率,获取屏幕宽、高用
			Display d = m.getDefaultDisplay(); 
			//获取对话框当前的参数值
			WindowManager.LayoutParams p = dialogWindow.getAttributes(); 
			//宽度设置为屏幕的0.8
			p.width = (int) (d.getWidth() * 0.8);
			//获取ListView的高度和当前屏幕的0.6进行比较,如果高,就自适应改变
			if(getTotalHeightofListView(list) > d.getHeight()*0.6){
				//得到ListView的参数值
				ViewGroup.LayoutParams params = list.getLayoutParams();
				//设置ListView的高度是屏幕的一半
				params.height = (int) (d.getHeight()*0.5);
				//设置
				list.setLayoutParams(params);
			}
			//设置Dialog的高度
			dialogWindow.setAttributes(p);
		}
	}
	/**
	 * 获取ListView的高度 
	 * @param listView  listview内容列表
	 * @return ListView的高度
	 */
	public int getTotalHeightofListView(ListView list) {
		//ListView的适配器
	   ListAdapter mAdapter = list.getAdapter(); 
	   if (mAdapter == null) {
	       return 0;
	   }
	   int totalHeight = 0;
	   //循环适配器中的每一项
	   for (int i = 0; i < mAdapter.getCount(); i++) {
		   //得到每项的界面view
	        View mView = mAdapter.getView(i, null, list);
	        //得到一个view的大小
	        mView.measure(
	                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
	                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
	        
	        //总共ListView的高度
	        totalHeight += mView.getMeasuredHeight();
	    }
	    return totalHeight;
	}


本文链接:https://www.it72.com/12318.htm

推荐阅读
最新回复 (0)
返回