关于了解布局单元
Regarding understanding the layout units
我正在计算 ListView 中某些项目的高度,然后以编程方式将计算出的高度分配给 ListView,以确保 ListView 将扩展以容纳其内容。我计算了 ListView 中项目的高度,如下面的代码所示。
如代码所示,下面一行returns一个值等于533:
height += listView.getDividerHeight() * listView.getCount();//
我遇到的问题是,当 ListView 的高度设置为代码中显示的返回值“533”时,ListView 与其内容的高度完全相同。但是当我为 ListView 设置相同的值“533”时
"android:layout_height" 在 XML 文件中,然后 ListView 超出其内容 "higher than its contents"
所以我的问题是:
请解释为什么会这样?
至于发布的代码,当我将 '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();
1-请解释为什么会这样?
在 .xml 布局文件中,您正在使用 dp
中的值。而计算出的值533是533px
。所以在布局xml文件中使用
android:layout_height="533px"
你会得到相同的结果。
首先,您需要了解尺码 here。它说
The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.
1-please explain why that is happening?
那是因为这些像素是如何呈现的。当你在 XML 中执行它时,它是 静态 渲染,当你在 Java 中执行它时,它是 动态 渲染。
2-至于发布的代码,当我将 'TypedValue.COMPLEX_UNIT_DIP' 更改为 'TypedValue.COMPLEX_UNIT_PX' 等任何其他单位时,根本没有任何变化。为什么改变layoutParameter
的单位没有效果
ans: return 值将以 px 为单位。
我正在计算 ListView 中某些项目的高度,然后以编程方式将计算出的高度分配给 ListView,以确保 ListView 将扩展以容纳其内容。我计算了 ListView 中项目的高度,如下面的代码所示。
如代码所示,下面一行returns一个值等于533:
height += listView.getDividerHeight() * listView.getCount();//
我遇到的问题是,当 ListView 的高度设置为代码中显示的返回值“533”时,ListView 与其内容的高度完全相同。但是当我为 ListView 设置相同的值“533”时 "android:layout_height" 在 XML 文件中,然后 ListView 超出其内容 "higher than its contents"
所以我的问题是:
请解释为什么会这样?
至于发布的代码,当我将 '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();
1-请解释为什么会这样?
在 .xml 布局文件中,您正在使用 dp
中的值。而计算出的值533是533px
。所以在布局xml文件中使用
android:layout_height="533px"
你会得到相同的结果。
首先,您需要了解尺码 here。它说
The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.
1-please explain why that is happening?
那是因为这些像素是如何呈现的。当你在 XML 中执行它时,它是 静态 渲染,当你在 Java 中执行它时,它是 动态 渲染。
2-至于发布的代码,当我将 'TypedValue.COMPLEX_UNIT_DIP' 更改为 'TypedValue.COMPLEX_UNIT_PX' 等任何其他单位时,根本没有任何变化。为什么改变layoutParameter
的单位没有效果ans: return 值将以 px 为单位。