【问题标题】:Supporting multiple screen sizes in Android by using multiple layouts通过使用多种布局在 Android 中支持多种屏幕尺寸
【发布时间】:2014-03-05 07:04:40
【问题描述】:

我正在编写一个在 720p 屏幕上运行良好的应用程序。我想让这个应用程序在不同的屏幕尺寸上运行。我看了这篇文章:http://developer.android.com/guide/practices/screens_support.html

但我很困惑。我为不同的布局(layout-normal、layout-large、layout-xlarge)创建了 3 个文件夹,并在每个文件夹中放置了一个不同的 XML 文件。但是有些屏幕布局正常,我的应用在其中一些上看起来不错,而在另一些上看起来很糟糕。例如,这些尺寸是正常布局:(4.7" WXGA, 4" WVGA, 3.7" WVGA, ...) 但我的应用在 4" 和 3.7" 上看起来不错,而在其他类型上看起来很糟糕。

我在layout-normal文件夹中的activity-main.xml是:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backasli"
    android:orientation="vertical" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="100dp"
        android:paddingTop="140dp"
        android:stretchColumns="3" >

        <TableRow
            android:id="@+id/tableRow6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center" >

            <TextView
                android:id="@+id/txt1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="pray :"
                android:textColor="#031a7b"
                android:textSize="15sp" />
        </TableRow>

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center" >

            <TextView
                android:id="@+id/namaztxt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:textColor="#031a7b"
                android:textSize="20sp" />
        </TableRow>

        <TableRow android:gravity="center" >

            <Button
                android:id="@+id/buttonchange"
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:background="@drawable/ubtn"
                android:text="change"
                android:textColor="#ffffff"
                android:textSize="20sp" />
        </TableRow>
    </TableLayout>

</LinearLayout>

【问题讨论】:

  • 我认为 android:paddingBottom="100dp" android:paddingTop="140dp" 这会给您的设备对齐带来问题?从某种意义上说它如何显示不好??
  • @Lokesh 。确切地!!!这些垫子有问题
  • 然后根据你所有布局中的屏幕更改填充..
  • @Lokesh,许多屏幕尺寸都是正常布局的,这些代码对其中一些有好处。我应该为每个屏幕添加布局吗?比如 layout-normal-3.7" ,layout-normal-4" 等等?
  • 只需要一个布局文件。不再。聪明地编码。至多,使用样式来改变真正大屏幕的权重。

标签: android android-layout layout multiscreen


【解决方案1】:

Android 提供了一种非常好的方式来支持多种屏幕尺寸。它被称为权重。您应该使用LinearLayout weights 并查看您的图形视图以确定您想要如何调整大小。

完全避免:

  1. 计算您的分辨率和屏幕尺寸。你最终会一团糟。
  2. 跨 dpi 的多种布局。

相信我,到目前为止,我开发的所有应用程序 (12) 都是使用权重和跨所有平台的 1 个布局文件完成的。它很有效,而且很神奇。

编辑:

我也从不使用超过 5dp 的填充和 10dp 的边距。通过这种方式,我可以保持代码整洁,并且 Android 权重会占用我的可用空间。

有关权重的更多信息,请查看this 问题。一开始就很好解释。

再次编辑:

考虑一下。您假设 dp 在所有手机的物理毫米(毫米)方面都是“相同的”。但事实并非如此。事实上,X 和 Y 1 dp 可能在“mm”中表示不同的含义。 dp 是“不”一致的。使用像 100dp 这样的代码并设置硬编码的宽度和高度时要小心。更糟糕的是,多个布局文件。你会因为这些而陷入很多代码维护的噩梦。

【讨论】:

  • ohk @siddhath :) 实际上我也没有使用硬代码,之前我解释过它,但我不喜欢我给这个把戏
  • 你能解释更多吗?例如,我应该将填充从 100dp 更改为 weight*100dp 并在 java 代码中控制权重吗?
  • OK.**weights** 是最好的主意...非常感谢。我发现在 :link 中使用了这个
  • 想想吧。您假设 dp 在所有手机的物理毫米(毫米)方面都“相同”。但事实并非如此。事实上 X 和 Y 1 dp,可能在“mm”中表示不同。 dp 是“不”一致的。使用像 100dp 这样的代码并设置硬编码的宽度、高度时要小心。更糟糕的是多个布局文件,你会陷入很多代码维护的噩梦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多