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都会使列表超出所需的高度。
请告知
答案 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。