23

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);
}

查看文档让我对所应用的计量单位一无所知。在这种情况下,测量单位是什么(dp、sp、px、...)?

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

请指教

4

3 回答 3

22

根据您链接的文档:像素。看到这个功能

宽度,MATCH_PARENT、WRAP_CONTENT 或以像素为单位的固定大小

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

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

即,它只是简单地调用具有默认值的 3 参数版本。

于 2013-06-29T18:20:31.597 回答
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);
    }
}
于 2018-01-20T00:37:17.487 回答
1

正如大卫所说,通过代码设置 LayoutParams 以像素为单位。您可以使用此线程中的代码将所需的 dp 转换为 px。

于 2013-06-29T18:25:13.500 回答