关于理解布局单位

Posted

技术标签:

【中文标题】关于理解布局单位【英文标题】:Regarding understanding the layout units 【发布时间】:2016-12-10 10:42:05 【问题描述】:

我正在计算 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();

【问题讨论】:

【参考方案1】:

1-请解释为什么会这样?

在 .xml 布局文件中,您使用的是 dp 中的值。而计算出来的值533是533px。所以在layout xml文件中使用

android:layout_

你会得到同样的结果。

【讨论】:

很好..但是当我将计算值“522”转换为 dpi 时得到 266......当我以编程方式设置 claculated dp 值时,如代码所示......我得到一个非常小的列表视图高度,即使我以编程方式在代码中指定了正确的单位 以编程方式,您必须在 px 中提供它。将值转换为 px。您将得到相同的结果。对于转换,请检查上述答案 我认为你的转换是错误的。检查最后一个答案。希望它有帮助!!!【参考方案2】:

首先,您需要了解尺寸here。它说

dp 单位到屏幕像素的转换很简单:px = dp * (dpi / 160)。例如,在 240 dpi 的屏幕上,1 dp 等于 1.5 个物理像素。在定义应用程序的 UI 时,您应该始终使用 dp 单位,以确保您的 UI 在不同密度的屏幕上正确显示。

1-请解释为什么会这样?

那是因为这些像素是如何渲染的。当您在 XML 中执行此操作时,它会以 静态方式 呈现,而当您在 Java 中执行此操作时,它会以 动态方式 呈现。

【讨论】:

【参考方案3】:

2-至于发布的代码,当我将“TypedValue.COMPLEX_UNIT_DIP”更改为任何其他单位(如“TypedValue.COMPLEX_UNIT_PX”)时,根本没有任何变化。为什么改变layoutParameter的单位没有效果

ans:返回值将以 px 为单位。

【讨论】:

以上是关于关于理解布局单位的主要内容,如果未能解决你的问题,请参考以下文章

关于rem单位的理解和应用

关于课上问题的理解

关于卷积的一些理解

关于position定位布局的问题和理解

关于position定位布局的问题和理解

关于 Linux 中 inode 的理解