在我的应用程序的某些部分,我需要明确设置布局的高度。
我有这个代码:
ListView.LayoutParams lp = new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, getListViewHeight(questionsList));
ListView.LayoutParams.WRAP_CONTENT);
final LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
final ListView questionView = new ListView(activity);
questionView.setId(generateViewId());
QuestionAdapter questions = new QuestionAdapter(activity, new ArrayList<TdcQuestion>(Arrays.asList(questionsList)));
questionView.setAdapter(questions);
questionView.setLayoutParams(lp);
layout.setLayoutParams(ll);
layout.addView(questionView);
计算lp布局高度的方法是:
private static int getListViewHeight(TdcQuestion[] questions)
{
int height = (questions.length - 1) * 7; // Suma al alto las separaciones entre los ítemes de la lista
for (int i = 0; i < questions.length; i++) {
String tipo = questions[i].getType().getName();
if (tipo.equals("RADIO"))
height += 212;
else if (tipo.equals("CHECK"))
height += 212;
else if (tipo.equals("NUM"))
height += 265;
else if (tipo.equals("TEXT"))
height += 433;
else if (tipo.equals("PHOTO"))
height += 85;
if (questions[i].hasPhoto())
height += 182;
}
return height;
}
问题是,在我的三星S6中它以完美的方式显示,这样:
然而,在客户的手机(阿尔卡特One Touch Mini S)中,它以这种方式显示:
标签为&#34; Modelo de BRs&#34;下面出现了很多像素。
我创建了一个与客户手机屏幕尺寸相同的仿真器设备,同样的情况也是如此,因此,这必须直接与屏幕尺寸有关。我该如何解决?
还有一个事实。我的手机是Android 5.1.1,而客户的手机有Android 4.2.2(API 18),但该应用程序正在为API 15编译,以使其更兼容。
答案 0 :(得分:1)
在getListViewHeight()
方法中,我看到了一堆数字。 LayoutParams
允许您根据PIXELS
设置高度和宽度。因此,您为特定设备设计了bunch of numbers
,因为它们只是PIXELS
。您需要做的是将它们设置为dp
或独立像素。
如何使用显示指标将dp
转换为pixels
如下所示:https://stackoverflow.com/a/5960030/4747587
现在,不要使用pixel
值,而是使用dp
值。这将确保您在具有不同密度的所有设备中具有相同的高度。