【问题标题】:How to create two separate layouts for 10'' and 9.7'' tablets?如何为 10 英寸和 9.7 英寸平板电脑创建两个单独的布局?
【发布时间】:2015-06-06 18:50:11
【问题描述】:

我正在为 Android 平板电脑开发一个应用程序。我已经读过这个Google's guide 好几遍了,但似乎有些不对劲:

我一直在 Genymotion 的 Google Nexus 10 (10.1'') 上测试该应用程序。昨天我买了一个 9.7'' 平板在真机上测试,但是界面就像我将 Android Studio 布局预览设置为 Nexus 9 (8.9'')

所以我猜到了:

  • 超过 10'' 被视为 xlarge
  • 小于 10'' 被视为large

所以我将所有布局移至/layout-xlarge-land/ 并开始设计一款适合我的 9.7 英寸平板电脑的新平板电脑,并放入 /layout-large-land/,基于 8.9 英寸 Nexus 9(看起来与我的 9.7 英寸平板电脑完全相同)

但令我惊讶的是,Android Studio(或实际上只是 Android)将 8.9'' (=9.7'') 和 10'' 都视为 large

我尝试了几个答案,将文件夹重命名为/layout-sw768dp/,但它们不起作用。

所以我需要两个文件夹:一个用于 10 英寸平板电脑,另一个用于 9.7 英寸平板电脑(是的,它们的处理方式不一样)。

我应该如何命名它们?

【问题讨论】:

  • 你解过这个谜吗?您使用什么 swXXXdp 文件夹来访问 9.7" 2048x1536 设备?

标签: android android-layout android-studio screen-size


【解决方案1】:

我需要两个文件夹:一个用于 10 英寸平板电脑,另一个用于 9.7 英寸平板电脑

这些不是有意义的数字,因此无法为它们提供不同的资源。它们没有意义,因为它们没有考虑纵横比。并非所有 Android 设备都具有相同的纵横比:有些是 16:9,有些是 16:10,有些是 4:3,有些是 1:1,有些是完全不同的。 10"、9.7" 和 kin 主要用于营销目的。

这与网页设计中没有什么不同,在网页设计中,设计师不会过多地谈论浏览器窗口的对角线尺寸。

出于技术目的,虽然您可以使用旧的 -large/-xlarge 类型的限定符,但它们在大约四年前被 -w/-h/-sw 限定符取代:

  • -w640dp 表示仅应在当前宽度为640dp(即 4 英寸)或更大的设备上使用的资源,您可以在我有 640 的地方提供您想要的数字

  • -h640dp 表示只能在当前高度为640dp 或更大的设备上使用的资源(同样,具有可自定义的值)

  • -sw640dp 表示只能在任何方向上最小宽度为640dp 或更大的设备上使用的资源(在横向中,“最小宽度”实际上是当前高度)

这让您可以控制网页设计师如何使用 CSS 样式表中的媒体查询来根据特定的高度和宽度更改 CSS 规则。

现在,由于没有人知道您认为什么是 9.7 英寸 UI 和您认为什么是 10 英寸 UI,因此没有人可以真正帮助您将其整合到一组布局规则中,或者为您提供可行的限定符值。您需要根据当前宽度、当前高度或最小宽度自行确定分割线的位置。让我们暂时假设您选择 800dp 当前宽度作为您的分界线。您小于 800dp 的布局将进入像 res/layout/res/layout-land/ 这样的目录。您的 800dp 或更大的布局将进入 res/layout-w800dp/

我已经尝试了几个答案,说要将文件夹重命名为 /layout-sw768dp/,但它们不起作用。

您不妨考虑编辑您的问题并解释“它们不起作用”的含义。

【讨论】:

  • 非常感谢,CommonsWare。我不知道以英寸为单位的屏幕尺寸不是标准。我必须检查两台平板电脑,发现大的(10.1'')是 1280 像素,所以我创建了 layout-w1280dp-land 并将更大的布局放在那里,正如你所指出的那样。
  • @jdarlan:res/layout-w1280dp-land/ 中使用的尺寸是与密度无关的像素 (dp),而不是像素,其中 1dp 是 1/160 英寸。现在,对于宽度为 1280 的 10" 平板电脑,它的屏幕密度可能在 160dpi 桶中,这就是您的数学工作的原因。但其他屏幕会有其他密度。另外-w1280dp-land 可能是多余的,除非您真的计划-w1280dp 的不同布局,其中设备为纵向,但当前宽度仍为 1280dp 或更大。
  • 我真的不明白你的回答。 “可能在 160dpi 存储桶中”为什么会这样?我不知道如何测量屏幕的与密度无关的像素。我从here 取了 1280 的宽度,那里也说 149 ppi,那是我的号码吗?因为我试过layout-w149dp-land 并不起作用。另外,为什么我的数学有效?再次,非常感谢,我学到了很多东西。
  • @jdarlan:“我不知道如何测量屏幕上与密度无关的像素”——Play 商店中有应用程序可以向您报告这一点。除此之外,使用尺子测量以英寸为单位的宽度和高度,然后将每个乘以 160 以获得 dp 中的宽度和高度(大约)。 “还有说 149 ppi,那是我的号码吗?” - 不。 “ppi”是每英寸像素数,也称为“dpi”(每英寸点数)。这是密度的声明,而不是大小的声明。 The documentation that you linked to 参与其中。
  • @jdarlan:请注意,-w1280dp 表示“将此布局用于 1280dp 或更大。1528 > 1280,因此当前宽度为 1528dp 的 @987654346 会很满意@布局,如果没有高于 1280dp 的可用仍然小于 1528dp。
猜你喜欢
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多