我正在计算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();
答案 0 :(得分:0)
1 - 请解释为什么会这样?
在.xml布局文件中,您正在使用dp
中的值。计算值533为533px
。因此在布局xml文件中使用
android:layout_height="533px"
你会得到相同的结果。
答案 1 :(得分:0)
首先,您需要了解尺寸here。它说
dp单位到屏幕像素的转换很简单:px = dp *(dpi / 160)。例如,在240 dpi屏幕上,1 dp等于1.5个物理像素。在定义应用程序的UI时,应始终使用dp单位,以确保在不同密度的屏幕上正确显示UI。
1 - 请解释为什么会这样?
那是因为这些像素是如何渲染的。当您在XML中执行此操作时,静态呈现,当您在Java中执行此操作时,动态呈现。
答案 2 :(得分:0)