如何在所有设备尺寸

时间:2015-10-27 12:39:26

标签: android android-layout android-layoutparams

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

我有这个代码:

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

Layout in my Samsung S6

然而,在客户的手机(阿尔卡特One Touch Mini S)中,它以这种方式显示:

enter image description here

标签为&#34; Modelo de BRs&#34;下面出现了很多像素。

我创建了一个与客户手机屏幕尺寸相同的仿真器设备,同样的情况也是如此,因此,这必须直接与屏幕尺寸有关。我该如何解决?

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

1 个答案:

答案 0 :(得分:1)

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

如何使用显示指标将dp转换为pixels如下所示:https://stackoverflow.com/a/5960030/4747587

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