0

我正在就我的应用程序中支持多个 Android 屏幕的问题寻求一些建议。

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

在我的各种测试设备上,这一切都很好。但是,一些用户联系我说数据超出了屏幕边缘。使用出色的Screen info 应用程序进行仔细检查表明,我能够测试我的应用程序的设备具有 Normal HDPI、Normal XHDPI 和 XLarge MDPI 屏幕,但出现问题的用户设备具有大型 MDPI 屏幕。

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

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

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

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

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

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

时间表视图不正确 正确的时间表视图

<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"
                    />
4

2 回答 2

2

不是构建应用程序的好方法。当您有随机的静态布局(即未分类为表格或网格或列表)时,您可以自由使用单个视图,但是当您有动态和分类布局时,使用大量视图不是一个好主意,而且它真的很麻烦而且难以管理。

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

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

一个非常好的GridView 教程链接。

于 2012-09-20T19:57:15.607 回答
0

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

相反,我返回并使用 android:weightSum 和 android:layout_weight 重新设计了我的应用程序中的每个屏幕。

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

于 2012-09-30T18:56:40.400 回答