如何使所有设备尺寸的显式设置布局高度相等

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 值。这将确保您在所有具有不同密度的设备中具有相同的高度。