LayoutParams使用什么度量单位?

24

我正在使用线性布局,并希望设置视图的最大高度。通常情况下,我希望视图使用"wrap_content"。然而,有时候情况可能会导致布局变得不理想。当这种情况发生时,我希望将高度限制在最大300dp。

当布局中的列表超过4个列表项时,我使用以下方法设置视图的大小:

LinearLayout listLayout = (LinearLayout) dialog.findViewById(R.id.listLayout);
if(list.size() > 4){
    LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 300);                           
    listLayout.setLayoutParams(params);
}

阅读文档后,我仍然无法确定应用的度量单位是什么。在这种情况下使用什么度量单位(dp、sp、px等)?

进行测试时,即使将值设置为100,列表也超过了所需高度。

请给予建议。

3个回答

22
根据您提供的文档,宽度可以是MATCH_PARENT、WRAP_CONTENT或像素中的固定尺寸。请参见此函数
即使您使用的函数没有明确的文档,但暗示它使用具有最多参数的函数的相同文档。该函数本身可能如下所示:
LinearLayout.LayoutParams(int width, int height) {
    this(width, height, /*some default value*/);
}

也就是说,它只是使用默认值调用了具有3个参数的版本。


因此,在阅读文档时,方法public LinearLayout.LayoutParams(int width,int height)public LinearLayout.LayoutParams(int width,int height,float weight)使用相同的描述:创建具有指定宽度,高度和权重的新布局参数集。参数 width宽度,可以是MATCH_PARENT,WRAP_CONTENT或以像素为单位的固定大小 height高度,可以是MATCH_PARENT,WRAP_CONTENT或以像素为单位的固定大小 weight权重 - Roy Hinkley
是的。LinearLayout.LayoutParams(int width, int height) 函数是 3 个参数版本的重载,可能看起来像这样:(编辑:添加到帖子,因为评论不会格式化代码) - J David Smith

3
如果你遇到困难,这里是完整的类和导入 - @Pierre.Vriens
//usage: int 300dpInPixels = util.convertDpToPixel(300);

import android.content.res.Resources;
import android.util.DisplayMetrics;

public class utils {
    public static int convertDpToPixel(float dp){
        DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
        float px = dp * (metrics.densityDpi / 160f);
        return Math.round(px);
    }
}

int 300dpInPixels = convertDpToPixel(300); 将300dp转换为像素,赋值给变量300dpInPixels。 - rahaprogramming

1
正如David所说,通过代码设置LayoutParams是以像素为单位的。您可以使用this thread中的代码将所需的dp转换为px。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接