0

在我的应用程序的某些部分,我需要明确设置布局的高度。

我有这个代码:

    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 中,它以这种方式完美显示:

我的三星 S6 中的布局

但是,在客户的手机(Alcatel One Touch Mini S)中,显示方式如下:

在此处输入图像描述

标签为“Modelo de BRs”的按钮在下方出现了很多像素。

我已经创建了一个与客户手机屏幕尺寸相同的模拟器设备,并且发生了同样的情况,因此,这与屏幕尺寸直接有关。我该如何解决?

还有一个事实。我的手机是 Android 5.1.1,而客户的手机是 Android 4.2.2 (API 18),但应用程序正在为 API 15 编译以使其更兼容。

4

1 回答 1

2

在你的getListViewHeight()方法中,我看到一堆数字。LayoutParams允许您根据PIXELS. 因此,您已经bunch of numbers为特定设备设计了它们,它们只是PIXELS. 您需要做的是将它们设置为dp独立像素。

此处显示了如何转换dppixels使用显示指标:https ://stackoverflow.com/a/5960030/4747587

所以现在,不要继续使用pixel值,而是使用dp值。这将确保您在具有不同密度的所有设备中具有相同的高度。

于 2015-10-27T13:20:36.167 回答