LayoutParams使用什么度量单位?

时间:2013-06-29 18:13:08

标签: android android-linearlayout layoutparams

p我正在使用线性布局,并希望设置视图的最大高度。在“正常”情况下,我希望视图使用“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);
}

审核documentation让我不知道应用的度量单位。在这种情况下(dp,sp,px,...)有哪些计量单位?

运行测试,甚至将值设置为100都会使列表超出所需的高度。

请告知

3 个答案:

答案 0 :(得分:21)

根据您链接的文档:像素。见this function

  

宽度,MATCH_PARENT,WRAP_CONTENT或像素中的固定大小

即使您使用的函数没有任何明确的文档,也暗示它使用与具有最多参数的函数相同的文档。该函数本身可能如下所示:

LinearLayout.LayoutParams(int width, int height) {
    this(width, height, /*some default value*/);
}

即。它只是使用默认值调用3参数版本。

答案 1 :(得分:2)

如果遇到麻烦,这是完整的进口课程 - @ 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);
    }
}

答案 2 :(得分:1)

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