今天在开发当中遇到一个问题:自定义的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://it72.com:4443/12318.htm