Android屏幕布局 - 多种布局和密度

时间:2012-09-19 21:32:45

标签: android layout screen

我正在寻找一些关于我在我的应用中支持多个Android屏幕的问题的建议。

我已阅读文章Supporting Multiple Screens。我按照建议创建了4 / res布局文件夹/ layout-small,/ layout-normal,/ layout-large和/ layout-xlarge。我主要使用RelativeLayouts,所有单位都是以倾角计算的。

在我的各种测试设备上,一切正常。但是,许多用户已经联系我说数据正在屏幕边缘运行。使用优秀的Screen info app进行更仔细的检查表明,我能够测试我的应用程序的设备具有普通HDPI,普通XHDPI和XLarge MDPI屏幕,但存在问题的用户设备具有大型MDPI屏幕。

我的IDE是IntelliJ Idea,它有一个预览模式,可让我根据多种不同的屏幕模拟测试布局。为了模拟大屏幕,我将预览模式设置为7英寸WSVGA(平板电脑)。这看起来是否正确?我没有实际的大屏幕测试设备。

我不明白为什么我遇到某些设备有问题?当然,我不需要创建超过我已设计的4种布局?即使在4岁时,每次添加一个屏幕都需要为每个屏幕更新不同的值时,它会变得非常痛苦。

其他开发人员如何在没有一系列测试设备的情况下测试不同的屏幕尺寸/密度?

修改的 我应该说 - 我的屏幕只包含按钮和文本视图,没有可说的图形。

编辑2 我添加了截图。第一个(实际上是照片)显示用户设备上显示的屏幕布局(注意星期五不可见)。第二个显示程序正常工作。

编辑3 我已经包含了一些用于布局的XML代码

Incorrect timetable view Correct timetable view

<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
             android:background="@drawable/paper_thin_background"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:paddingLeft="15dip"
             android:paddingTop="15dip"
    >

<TextView
        android:id="@+id/timetable_week"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="25dip"
        android:textSize="20sp"
        android:textColor="#15252D"
        android:text="@string/timetable_week"
        android:paddingTop="10dip"
        android:paddingBottom="30dip"
        />

<Spinner
        android:id="@+id/timetable_week_spinner"
        android:layout_toRightOf="@id/timetable_week"
        android:layout_height="wrap_content"
        android:prompt="@string/enterday"
        android:layout_width="140dip"
        android:entries="@array/timetable_weeks"
        android:textSize="205sp"
        android:textColor="#768766"
        />
            <TextView
                android:id="@+id/period_heading"
                android:layout_width="120dp"
                android:layout_height="wrap_content"
                android:textColor="#768766"
                android:text="@string/period"
                android:textSize="20sp"
                android:paddingBottom="15dip"
                android:gravity="center_horizontal"
                android:layout_below="@+id/timetable_week"
            />

            <TextView
                    android:id="@+id/monday_heading"
                    android:layout_toRightOf="@id/period_heading"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#768766"
                    android:text="@string/monday"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    android:layout_below="@+id/timetable_week"
                    />

            <TextView
                    android:id="@+id/tuesday_heading"
                    android:layout_toRightOf="@id/monday_heading"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#768766"
                    android:text="@string/tuesday"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    android:layout_below="@+id/timetable_week"
                    />
            <TextView
                    android:id="@+id/wednesday_heading"
                    android:layout_toRightOf="@id/tuesday_heading"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#768766"
                    android:text="@string/wednesday"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    android:layout_below="@+id/timetable_week"
                    />
            <TextView
                    android:id="@+id/thursday_heading"
                    android:layout_toRightOf="@id/wednesday_heading"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#768766"
                    android:text="@string/thursday"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    android:layout_below="@+id/timetable_week"
                    />
            <TextView
                    android:id="@+id/friday_heading"
                    android:layout_toRightOf="@id/thursday_heading"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#768766"
                    android:text="@string/friday"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    android:layout_below="@+id/timetable_week"
                    />

    <!-- PERIOD 1-->

            <TextView
                    android:id="@+id/p1_heading"
                    android:layout_below="@id/period_heading"
                    android:layout_width="120dp"
                    android:layout_height="wrap_content"
                    android:textColor="#768766"
                    android:text="@string/p1"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    />

            <TextView
                    android:id="@+id/monp1"
                    android:layout_below="@id/period_heading"
                    android:layout_toRightOf="@id/period_heading"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#15252D"
                    android:text="@string/blank"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    />

            <TextView
                    android:id="@+id/tuep1"
                    android:layout_below="@id/period_heading"
                    android:layout_toRightOf="@id/monp1"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#15252D"
                    android:text="@string/blank"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    />

            <TextView
                    android:id="@+id/wedp1"
                    android:layout_below="@id/period_heading"
                    android:layout_toRightOf="@id/tuep1"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#15252D"
                    android:text="@string/blank"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    />

            <TextView
                    android:id="@+id/thup1"
                    android:layout_below="@id/period_heading"
                    android:layout_toRightOf="@id/wedp1"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#15252D"
                    android:text="@string/blank"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    />

            <TextView
                    android:id="@+id/frip1"
                    android:layout_below="@id/period_heading"
                    android:layout_toRightOf="@id/thup1"
                    android:layout_width="170dp"
                    android:layout_height="wrap_content"
                    android:textColor="#15252D"
                    android:text="@string/blank"
                    android:textSize="20sp"
                    android:paddingBottom="15dip"
                    android:gravity="center_horizontal"
                    />

2 个答案:

答案 0 :(得分:2)

构建应用程序的方式不是很好。如果你有随机的静态布局(即没有分类为表格或网格或列表),那么你可以自由使用单独的视图,但是当你有一个动态和分类的布局时,那么使用大量的视图并不是一个好主意加上它真的很麻烦难以管理。

  

例如。在您的情况下,您需要显示表格或数据网格。您已使用大量文本视图实现了此功能。现在在某些设备上它会适合,有些则不适用。您可以使用像网格视图这样的动态视图轻松实现小代码。
  如果您使用网格视图,那么您只需要一个网格视图和一个文本视图作为它的项目。现在,根据设备大小,您可以更改列宽(文本项的大小),并且布局可以轻松适合任何设备。

如果您需要支持多个设备,则需要使用xmls(不同文件夹中的不同xmls)和代码的组合。

非常好的link到GridView教程。

答案 1 :(得分:0)

我已经意识到我遇到的问题与我使用相对布局和DIP测量有关。以这种方式支持各种设备是不可能的。

相反,我已经使用android:weightSum和android:layout_weight重新设计了我的应用中的每个屏幕。

理论上,这应该使我的应用程序更适应不同的屏幕尺寸。