对于第一代运行 Android 3.0 的平板电脑,声明平板电脑 的正确方式是将它们放在有 xlarge
配置限定符的目录(例如 res/layout-xlarge/
)中。为适应其他类型的平板电脑和屏幕 尺寸 — 特别是 7 英寸平板电脑 — Android 3.2 引入了为更具体的屏幕尺寸指定资源 的新方式。新技术基于布局需要的空间量 (例如 600dp 宽),而不是尝试让您的布局容纳通用化的尺寸组 (例如大或超大)。
使用通用化的尺寸组时,为 7 英寸平板电脑设计很棘手的原因在于, 7 英寸平板电脑在技术上与 5 英寸手机属于同一个组(大组)。虽然 这两种设备在尺寸上似乎很接近,但用于 应用 UI 的空间量明显不同,用户交互的方式也是如此。因此,7 英寸和 5 英寸 屏幕不一定使用相同的布局。为便于您为这两种屏幕提供不同的 布局,Android 现在允许您 根据实际适用于应用布局的宽度和/或高度指定布局资源( 以 dp 单位数指定)。
例如,在设计要用于平板电脑样式设备的布局之后,您可能 发现该布局在屏幕宽度小于 600dp 时不适用。此阈值 于是变成平板电脑布局需要的最小尺寸。因此,您现在可以指定应仅当至少有 600dp 宽度供应用的 UI 使用时才使用这些布局资源。
应选择一个宽度并将其设计为最小尺寸,或者在布局设计完成后测试 其支持的最小宽度。
注:请记住,这些新尺寸 API 使用的所有数据是密度独立的像素 (dp) 值,您的布局尺寸也应始终 使用 dp 单位定义,因为您关注的是系统 考虑屏幕密度后可用的屏幕空间量(与使用原始像素分辨率相反)。如需了解 密度独立像素的更多信息,请参阅本文档前面的术语和概念 。
使用新尺寸限定符
表 2 摘要列出了您可以根据 布局可用空间指定的不同资源配置。与传统的屏幕尺寸组(小、 正常、大和超大)相比,这些新的限定符可用于更多地控制 应用支持的屏幕尺寸。
注:您使用这些限定符指定的尺寸 不是实际屏幕尺寸。更确切地说,尺寸是 可用于 Activity 窗口的宽度或高度(dp 单位)。Android 系统 可能将某些屏幕用于系统 UI(例如屏幕底部的系统栏或 顶部的状态栏),因此有些屏幕可能不适用于您的布局。因此, 您声明的尺寸应与 Activity 需要的尺寸具体相关 — 系统 在声明向您的布局提供的空间量时会计算系统 UI 使用的任何空间。 另请注意,操作栏被视为 应用的窗口空间的一部分,但您的布局未声明此事,因此会减少 您的布局可用的空间,您在设计时必须考虑进去。
屏幕配置 | 限定符值 | 说明 |
---|---|---|
smallestWidth | sw<N>dp 示例: sw600dp sw720dp | 屏幕的基本尺寸,由可用屏幕区域的最小尺寸指定。 具体来说,设备的 smallestWidth 是屏幕可用高度和宽度的最小尺寸(您也可以将其视为屏幕的“最小可能宽度”)。无论屏幕的当前方向如何,您均可使用此限定符确保应用 UI 的可用宽度至少为 例如,如果布局要求屏幕区域的最小尺寸始终至少为 600 dp,则可使用此限定符创建布局资源 设备的 smallestWidth 将屏幕装饰元素和系统 UI 考虑在内。例如,如果设备的屏幕上有一些永久性 UI 元素占据沿 smallestWidth 轴的空间,则系统会声明 smallestWidth 小于实际屏幕尺寸,因为这些屏幕像素不适用于您的 UI。 这可替代通用化的屏幕尺寸限定符(小、正常、大、超大), 可让您为 UI 可用的有效尺寸定义不连续的数值。 使用 smallestWidth 定义一般屏幕尺寸很有用,因为宽度 通常是设计布局时的驱动因素。UI 经常会垂直滚动,但 对其水平需要的最小空间具有非常硬性的限制。可用的宽度也是 确定是否对手机使用单窗格布局或是对平板电脑使用多窗格布局 的关键因素。因此,您可能最关注每部 设备上的最小可能宽度。 |
可用屏幕宽度 | w<N>dp 示例: w720dp w1024dp | 指定资源应该使用的最小可用宽度(dp 单位) — 由 这对于确定是否使用多窗格布局往往很有用,因为即使是在 平板电脑设备上,您也通常不希望竖屏像横屏一样 使用多窗格布局。因此,您可以使用此功能指定布局需要的最小宽度,而 无需同时使用屏幕尺寸和方向限定符。 |
可用屏幕高度 | h<N>dp 示例: h720dp h1024dp 等等 | 指定资源应该使用的最小屏幕高度(dp 单位) — 由 使用此方式定义 布局需要的高度很有用,它与使用 |
虽然使用这些限定符似乎比使用屏幕尺寸组更复杂,但 当您确定 UI 的要求后,它实际上应该更简单。在设计 UI 时, 您主要关注的可能是应用在 手机样式 UI 与使用多窗格的平板电脑样式 UI 之间切换时的实际尺寸。此确切的精确时间 取决于特定设计 — 可能平板电脑布局需要 720dp 宽度, 但 600dp、480dp 或这两者之间的某个值就够了。使用表 2 中的这些限定符 可以控制布局切换时的精确尺寸。
如需有关这些尺寸配置限定符的更多讨论,请参阅 提供资源文档。
配置示例
为帮助您针对不同的设备类型确定某些设计,下面提供了一些 常见的屏幕宽度值:
- 320dp:常见手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。
- 480dp:中间平板电脑,例如 Streak (480x800 mdpi)。
- 600dp:7 英寸平板电脑 (600x1024 mdpi)。
- 720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)。
利用表 2 中的尺寸限定符,您的应用可以使用要用于宽度和/或高度的 的任何值,在用于手机和平板电脑的不同布局资源之间切换。例如, 如果 600dp 是平板电脑布局支持的最小可用宽度,您可以提供以下两 组布局:
res/layout/main_activity.xml # For handsets res/layout-sw600dp/main_activity.xml # For tablets
在此情况下,可用屏幕空间的最小宽度必须是 600dp,才可 应用平板电脑布局。
对于要进一步自定义 UI 以区分不同尺寸 (例如 7 英寸和 10 英寸平板电脑)的其他情况,您可以定义其他最小宽度布局:
res/layout/main_activity.xml # For handsets (smaller than 600dp available width) res/layout-sw600dp/main_activity.xml # For 7” tablets (600dp wide and bigger) res/layout-sw720dp/main_activity.xml # For 10” tablets (720dp wide and bigger)
请注意,上面两组示例资源使用“最小宽度”限定符 sw<N>dp
,用于指定屏幕两边的最小值,而不管设备 当前的方向如何。因此,使用 sw<N>dp
是指定 布局可用于整体屏幕尺寸的简便方法,它会忽略屏幕的方向。
但在某些情况下,可能 必须确定布局当前可用的精确宽度或高度。例 如,如果是并排显示两个片段的双窗格布局,则只要 屏幕提供至少 600dp 的宽度(无论设备是横屏还是竖屏), 您可能就要使用该布局。在此情况下,您的资源可能与以下所示类似:
res/layout/main_activity.xml # For handsets (smaller than 600dp available width) res/layout-w600dp/main_activity.xml # Multi-pane (any screen with 600dp available width or more)
请注意,第二组使用“可用宽度”限定符 w<N>dp
。这 样,一部设备可能实际使用两种布局,具体取决于屏幕的方向(如果 可用的宽度在一个方向上至少为 600dp,而在另一个方向上小于 600dp)。
如果您关注可用高度,便可使用 h<N>dp
限定符执行同样的操作。或者,如果您需要很具体,甚至可以结合 w<N>dp
与 h<N>dp
限定符。
声明屏幕尺寸支持
在对不同的屏幕尺寸实现您的布局后,在 清单文件中声明您的应用支持哪些屏幕相当重要。
与用于屏幕尺寸的新配置限定符一起,Android 3.2 为 <supports-screens> 清单元素引入了新的属性:
-
指定需要的最小 smallestWidth。smallestWidth 是必须为您的应用 UI 提供的 屏幕空间的最短尺寸(
dp
单位)—即 可用屏幕的两个尺寸中的最短者。因此,为使设备 与您的应用兼容,设备的 smallestWidth 必须等于或大于此 值。(通常,无论屏幕的当前方向如何, 此值都是布局支持的“最小宽度”。)例如,如果您的应用只用于最小可用宽度为 600dp 的平板电脑样式设备:
<manifest ... > <supports-screens android:requiresSmallestWidthDp="600" /> ... </manifest>
但是,如果您的应用支持 Android 支持的所有屏幕尺寸(小至 426dp x 320dp),则无需声明此属性,因为应用 需要的最小宽度就是任何设备上可以实现的最小宽度。
注意:Android 系统不关注此 属性,因为它不影响应用在运行时的行为,而是被用于 在服务(例如 Google Play)上过滤您的应用。但是,Google Play 目前不支持此属性用于过滤(在 Android 3.2 上),因此如果您的应用不支持 小屏幕,您应继续使用其他尺寸属性。
-
此属性可让您指定用户支持的最大“最小宽度”,将
屏幕兼容性模式用作 用户可选的功能 。如果设备可用屏幕的最小边大于您在这里的值, 用户仍可安装您的应用,但提议在屏幕兼容性模式下运行。默认 情况下,屏幕兼容性模式会停用,并且您的布局照例会调整大小以 适应屏幕,但按钮会显示在系统栏中,可让用户打开和关闭屏幕兼容性 模式。
注:如果您的应用可针对大 屏幕正确调整大小,则无需使用此属性。建议不要使用此 属性,而是按照本文档的 建议,确保您的布局针对较大屏幕调整大小。
-
此属性可让您指定应用支持的最大“最小宽度”来强制启用
屏幕兼容性模式。 如果设备可用屏幕的最小 边大于您在这里的值,应用将在屏幕 兼容性模式下运行,且用户无法停用该模式。
注:如果您的应用可针对大 屏幕正确调整大小,则无需使用此属性。建议不要使用此 属性,而是按照本文档的 建议,确保您的布局针对较大屏幕调整大小。
android:requiresSmallestWidthDp
android:compatibleWidthLimitDp
android:largestWidthLimitDp
注意:针对 Android 3.2 及更高版本开发时,您 应改为将旧屏幕尺寸属性与上列 属性结合使用。同时使用新属性和旧尺寸属性可能导致 非预期的行为。
如需了解每个属性的更多信息,请跟随上面各自的链接。