android-支持多种屏幕[声明适用于 Android 3.2 的平板电脑布局] 七

来源:互联网 发布:扎克伯格怎么赚钱 知乎 编辑:程序博客网 时间:2024/04/29 00:57

对于第一代运行 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 使用的任何空间。 另请注意,操作栏被视为 应用的窗口空间的一部分,但您的布局未声明此事,因此会减少 您的布局可用的空间,您在设计时必须考虑进去。

表 2. 屏幕尺寸的新配置限定符 (在 Android 3.2 中引入)。

屏幕配置限定符值说明smallestWidthsw<N>dp

示例:
sw600dp
sw720dp

屏幕的基本尺寸,由可用屏幕区域的最小尺寸指定。 具体来说,设备的 smallestWidth 是屏幕可用高度和宽度的最小尺寸(您也可以将其视为屏幕的“最小可能宽度”)。无论屏幕的当前方向如何,您均可使用此限定符确保应用 UI 的可用宽度至少为 <N>dp。

例如,如果布局要求屏幕区域的最小尺寸始终至少为 600 dp,则可使用此限定符创建布局资源 res/layout-sw600dp/。仅当可用屏幕的最小尺寸至少为 600dp 时,系统才会使用这些资源,而不考虑 600dp 所代表的边是用户所认为的高度还是宽度。smallestWidth 是设备的固定屏幕尺寸特性;设备的 smallestWidth 不会随屏幕方向的变化而改变

设备的 smallestWidth 将屏幕装饰元素和系统 UI 考虑在内。例如,如果设备的屏幕上有一些永久性 UI 元素占据沿 smallestWidth 轴的空间,则系统会声明 smallestWidth 小于实际屏幕尺寸,因为这些屏幕像素不适用于您的 UI。

这可替代通用化的屏幕尺寸限定符(小、正常、大、超大), 可让您为 UI 可用的有效尺寸定义不连续的数值。 使用 smallestWidth 定义一般屏幕尺寸很有用,因为宽度 通常是设计布局时的驱动因素。UI 经常会垂直滚动,但 对其水平需要的最小空间具有非常硬性的限制。可用的宽度也是 确定是否对手机使用单窗格布局或是对平板电脑使用多窗格布局 的关键因素。因此,您可能最关注每部 设备上的最小可能宽度。

可用屏幕宽度w<N>dp

示例:
w720dp
w1024dp

指定资源应该使用的最小可用宽度(dp 单位) — 由 <N> 值定义。当屏幕的方向在横屏与竖屏之间切换时,系统对应的 宽度值将会变化,以 反映 UI 可用的当前实际宽度。

这对于确定是否使用多窗格布局往往很有用,因为即使是在 平板电脑设备上,您也通常不希望竖屏像横屏一样 使用多窗格布局。因此,您可以使用此功能指定布局需要的最小宽度,而 无需同时使用屏幕尺寸和方向限定符。

可用屏幕高度h<N>dp

示例:
h720dp
h1024dp
等等

指定资源应该使用的最小屏幕高度(dp 单位) — 由 <N> 值定义。当屏幕的方向在横屏与竖屏之间切换时,系统 对应的高度值将会变化,以 反映 UI 可用的当前实际高度。

使用此方式定义 布局需要的高度很有用,它与使用 w<N>dp 定义 所需宽度的方式相同,无需同时使用屏幕尺寸和方向限定符。 但大多数应用不需要此限定符,考虑到 UI 经常垂直滚动, 因此高度更弹性,而宽度更刚性。

虽然使用这些限定符似乎比使用屏幕尺寸组更复杂,但 当您确定 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 handsetsres/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> 清单元素引入了新的属性:

android:requiresSmallestWidthDp
指定需要的最小 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:compatibleWidthLimitDp
此属性可让您指定用户支持的最大“最小宽度”,将屏幕兼容性模式用作 用户可选的功能 。如果设备可用屏幕的最小边大于您在这里的值, 用户仍可安装您的应用,但提议在屏幕兼容性模式下运行。默认 情况下,屏幕兼容性模式会停用,并且您的布局照例会调整大小以 适应屏幕,但按钮会显示在系统栏中,可让用户打开和关闭屏幕兼容性 模式。

注:如果您的应用可针对大 屏幕正确调整大小,则无需使用此属性。建议不要使用此 属性,而是按照本文档的 建议,确保您的布局针对较大屏幕调整大小。

android:largestWidthLimitDp
此属性可让您指定应用支持的最大“最小宽度”来强制启用屏幕兼容性模式。 如果设备可用屏幕的最小 边大于您在这里的值,应用将在屏幕 兼容性模式下运行,且用户无法停用该模式。

注:如果您的应用可针对大 屏幕正确调整大小,则无需使用此属性。建议不要使用此 属性,而是按照本文档的 建议,确保您的布局针对较大屏幕调整大小。

注意:针对 Android 3.2 及更高版本开发时,您 应改为将旧屏幕尺寸属性与上列 属性结合使用。同时使用新属性和旧尺寸属性可能导致 非预期的行为。

如需了解每个属性的更多信息,请跟随上面各自的链接。


0 0
原创粉丝点击