如何使所有设备尺寸的显式设置布局高度相等
How to make explicitly set layout height be equal in all device sizes
在我的应用程序的某些部分,我需要明确设置布局的高度。
我有这个代码:
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;
}
问题是在我的 Samsung S6 中显示完美,这样:
然而,在客户的phone(阿尔卡特One Touch Mini S)中,它是这样显示的:
标签为"Modelo de BRs"的按钮出现在下面很多像素。
我创建了一个与客户 phone 屏幕尺寸相同的模拟器设备,结果也是如此,因此,这与屏幕尺寸直接相关。我该如何解决?
还有一个事实。我的 phone 是 Android 5.1.1,而客户的 phone 有 Android 4.2.2 (API 18),但是应用程序正在为 API 15 使其更兼容。
在你的getListViewHeight()
方法中,我看到了一堆数字。 LayoutParams
允许您根据 PIXELS
设置高度和宽度。因此,您为特定设备设计了 bunch of numbers
,因为它们只是 PIXELS
。您需要做的是将它们设置为 dp
或独立像素。
如何使用显示指标将 dp
转换为 pixels
,如下所示:
所以现在,不要继续使用 pixel
值,而是使用 dp
值。这将确保您在所有具有不同密度的设备中具有相同的高度。
在我的应用程序的某些部分,我需要明确设置布局的高度。
我有这个代码:
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;
}
问题是在我的 Samsung S6 中显示完美,这样:
然而,在客户的phone(阿尔卡特One Touch Mini S)中,它是这样显示的:
标签为"Modelo de BRs"的按钮出现在下面很多像素。
我创建了一个与客户 phone 屏幕尺寸相同的模拟器设备,结果也是如此,因此,这与屏幕尺寸直接相关。我该如何解决?
还有一个事实。我的 phone 是 Android 5.1.1,而客户的 phone 有 Android 4.2.2 (API 18),但是应用程序正在为 API 15 使其更兼容。
在你的getListViewHeight()
方法中,我看到了一堆数字。 LayoutParams
允许您根据 PIXELS
设置高度和宽度。因此,您为特定设备设计了 bunch of numbers
,因为它们只是 PIXELS
。您需要做的是将它们设置为 dp
或独立像素。
如何使用显示指标将 dp
转换为 pixels
,如下所示:
所以现在,不要继续使用 pixel
值,而是使用 dp
值。这将确保您在所有具有不同密度的设备中具有相同的高度。