【问题标题】:Creating multi-screen support app android创建多屏支持应用程序android
【发布时间】:2014-03-29 07:09:12
【问题描述】:

我正在 Android 中创建一个必须支持多屏的应用。

为此,我已经阅读了很多答案,我最喜欢的一个是状态,我可以通过以下名称在 res 文件夹中创建不同的文件夹,

对于小屏幕layout-small

对于大屏幕layout-large

对于超大屏幕layout-xlarge

我必须为具有相同名称的不同屏幕创建不同的布局。 例如 mylayout.xml

我必须将以下代码放入 manifest.xml 文件中

<supports-screens android:smallScreens="true" 
      android:normalScreens="true" 
      android:largeScreens="true"
      android:xlargeScreens="true"
      android:anyDensity="true" />

最后我只需要在我的 Activity 文件中写下以下几行,

  setContentView(R.layout.mylayout);

现在当我在不同尺寸的屏幕上运行这个应用程序时,它应该根据屏幕分辨率从不同的文件夹获取布局。

但这在我的情况下没有发生。它只需要在 layout 文件夹中定义的布局。

请有人解释一下为什么会发生这种情况以及如何解决这个问题,以便我的应用可以在所有尺寸的屏幕上有效运行。

【问题讨论】:

  • 您必须将 xml 文件复制到这些文件夹中
  • 不,我在每个文件夹中创建了单独的屏幕
  • 屏幕是否同名?即每个文件夹中的 main.xml
  • 然后请尝试这样的名称 layout-sw320dp,layout-sw480dp,layout-sw600dp,layout-sw720dp
  • 是的,我使用了相同的名字

标签: android layout screen android-screen-support


【解决方案1】:

试试看:

  • layout-sw320dp
  • 布局-sw480dp
  • layout-sw600dp
  • 布局-sw720dp

而不是

  • 布局小,
  • layout-large 等...

【讨论】:

  • 顺便说一句,我应该为可绘制图像尝试什么?
  • 同样的方法你可以创建尝试drawable-xxhdpi、drawable-sw-720dp等。
  • 一个文件夹支持多屏怎么办??
【解决方案2】:

请参考以下链接:

http://developer.android.com/guide/practices/screens_support.html 对于不同的屏幕尺寸,以下是应用程序中的资源目录列表,该应用程序为不同的屏幕尺寸提供不同的布局设计,并为小、中、高和超高密度屏幕提供不同的位图可绘制对象。您可以在 res 文件夹中使用不同大小的布局文件,也可以根据密度对可绘制图像进行调整。

  res/layout/my_layout.xml             // layout for normal screen size ("default")
  res/layout-small/my_layout.xml       // layout for small screen size
  res/layout-large/my_layout.xml       // layout for large screen size
  res/layout-xlarge/my_layout.xml      // layout for extra large screen size
  res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png // 中等密度的位图 res/drawable-hdpi/my_icon.png // 高密度位图 res/drawable-xhdpi/my_icon.png // 超高密度位图

<compatible-screens>
    <screen
        android:screenDensity="ldpi"
        android:screenSize="small" />
    <screen
        android:screenDensity="mdpi"
        android:screenSize="normal" />
    <screen
        android:screenDensity="xhdpi"
        android:screenSize="large" />
    <screen
        android:screenDensity="xhdpi"
        android:screenSize="xlarge" />        
</compatible-screens>

然后任何活动都使用此行..

android:configChanges="orientation|screenSize|keyboardHidden"

【讨论】:

  • 要记住的一点是,很多时候单个布局 xml 就可以了,因此您可能只需要一个布局文件夹。在这种情况下,您仍然需要针对特定​​尺寸/可绘制对象等使用不同的值文件夹。从单一布局中引用这些资源会使生活变得更加轻松。
  • 你的方法很好,但是很难遍历每个文件夹并更新更改...我们可以通过单个文件夹来完成所有屏幕的布局和布局域
【解决方案3】:

layout-small 这样的值文件夹命名约定仅适用于具有api version less than 3.1 的设备。对于大于 3.1 的 api 级别,您应该创建命名为 layout-sw600dp 的值文件。阅读此http://developer.android.com/guide/practices/screens_support.html3.1api

像这样,您应该为每种类型的设备创建 layout-sw600dp、layout-sw720dp。 layout-sw600dp 表示此布局适用于最小宽度为 600dp 的设备 如果您有 layout-600dp 和 layout-sw720dp 文件夹。第一个布局文件夹适用于最小宽度为 600dp(7 英寸平板电脑)到 720dp 的设备,第二个适用于最小宽度超过 720dp(10 英寸平板电脑)的设备。

如果您的最低要求版本高于 3.1,则不需要 layout-small,layoutxLarge 文件夹。否则你必须考虑 两种类型的布局 fromats。

【讨论】:

    【解决方案4】:

    以下是一份快速清单,了解如何确保您的应用程序在不同的屏幕上正确显示:

    在 XML 布局文件中指定尺寸时使用 wrap_content, fill_parent,dp 单位。 不要在应用程序代码(.java 文件)中使用硬编码的 pixel 值。 不要使用AbsoluteLayout(在Android 1.5 中已弃用)。您应该改用RelativeLayout,它使用相对定位来布置其子视图。 为不同的屏幕密度提供替代的位图可绘制对象。

    花点时间阅读这些screens_support 或查看How Android Finds the Best-matching Resource 以获得更好的想法,以便您知道将资源放在哪里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多