我正在计算ListView中某些项目的高度,然后以编程方式将计算出的高度分配给ListView,以确保ListView将展开以适应其内容。我计算了ListView中项目的高度,如下面的代码所示。关于理解布局单元
如该代码所示,下面的行返回等于533的值:
height += listView.getDividerHeight() * listView.getCount();//
我的问题是,当ListView中的高度设定为返回值“533”,如图在代码中,ListView与它的内容具有完全相同的高度。但是,当我把整个相同的值“533”到ListView :XML文件中的“Android layout_height”,然后ListView的扩展太大超出其内容
“比它的内容更高”所以我的问题是:
请解释为什么发生这种情况?
至于发布的代码,当我将'TypedValue.COMPLEX_UNIT_DIP'更改为'TypedValue.COMPLEX_UNIT_PX'之类的任何其他单元时,根本没有任何变化。为什么在更改LayoutParameter的单位时没有效果?
代码:
int height = 0;
for (int i = 0; i < listView.getCount(); i++) {
View childView = listView.getAdapter().getView(i, null, listView);
childView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
height+= childView.getMeasuredHeight();
}
//dividers height
height += listView.getDividerHeight() * listView.getCount();// returns 533
param = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, this.getResources().getDisplayMetrics()));
param.addRule(RelativeLayout.BELOW, ruleSubject);
container.setLayoutParams(param);
listView.requestLayout();
fine..but当我转换的计算值 “522” 新闻部获得266 ......当我编程方式设置claculated DP值,如图代码..我得到一个非常小的listview高度,即使我以编程方式在代码中指定了正确的单位 – user2121
以编程方式您必须在px.convert中将值赋给px.您将得到相同的结果。以上回答 –
我觉得你的转换是错误的。检查最后的答案。它可以帮助! –