当前位置:网站首页 > R语言数据分析 > 正文

gridview自适应宽度(grid布局自适应)



本页将介绍 Android 12(API 级别 31)中引入的微件大小调整和更高的灵活性。其中还详细介绍了如何确定微件的尺寸。

从 Android 12(API 级别 31)开始,您可以执行以下操作来提供更精细的尺寸属性和灵活的布局,如以下部分所述:

  1. 指定额外的微件大小调整限制。
  2. 提供自适应布局或精确布局。

在较低版本的 Android 中,可以使用 、、 和 extra 获取微件的大小范围,然后估算微件的大小,但该逻辑并非在所有情况下都适用。对于以 Android 12 或更高版本为目标平台的微件,我们建议您提供自适应布局或精确布局。

Android 12 添加了 API,可让您确保 widget 在具有不同屏幕尺寸的不同设备上更可靠地调整大小。

除了现有的 、、 和 属性之外,还可以使用下面这些新的 属性:

  • 和 :根据启动器网格单元定义 widget 的目标大小。定义后,会使用这些属性,而不是 或 。
  • 和 :定义启动器允许用户调整微件大小的大小上限。

以下 XML 展示了如何使用大小调整属性。

如果布局需要根据微件的大小进行更改,我们建议您创建一小组布局,每个布局对一定范围的大小有效。如果无法做到这一点,另一种方法是根据运行时的精确微件大小来提供布局,如本页所述。

此功能可实现更顺畅的扩缩和更好的系统运行状况,因为系统不必在每次以不同大小显示 widget 时都唤醒应用。

以下代码示例展示了如何提供布局列表。

假设该 widget 具有以下属性:

上述代码段的含义如下:

  • 支持的范围是从 160dp () × 110dp () 到 160dp × 199dp(下一个截止点 - 1dp)。
  • 支持 160dp × 200dp 到 214dp(下一个截断点 - 1)× 200dp 的范围。
  • 支持 215dp × 110dp () 到 250dp () × 200dp () 的尺寸。

您的 widget 必须支持 × 到 × 的尺寸范围。在此范围内,您可以决定布局切换的截止点。

自适应布局示例
图 1. 自适应布局示例。

如果一小组自适应布局不可行,您可以改为提供根据微件的显示大小量身定制的不同布局。通常,手机有两种大小(竖屏和横屏模式),可折叠设备有四种大小。

如需实现此解决方案,您的应用需要执行以下步骤:

  1. 过载 ,当一组大小发生更改时,就会调用此方法。
  2. 调用 ,这样会返回包含大小的 。
  3. 访问 中的 键。

以下代码示例展示了如何提供精确布局。

每个微件都必须为搭载 Android 12 或更高版本的设备定义 和 ,或为所有 Android 版本定义 和 ,以指明其默认占用的最小空间量。不过,当用户向其主屏幕添加微件时,微件占用的宽度和高度通常会超过您指定的最小值。

Android 主屏幕为用户提供了一个可用空间网格,供他们放置微件和图标。该网格可能因设备而异;例如,许多手机都提供 5x4 网格,而平板电脑可以提供更大的网格。添加微件后,它将在水平和垂直方向进行拉伸,占用满足其 和 约束条件所需的最小单元格数(在搭载 Android 12 或更高版本的设备上),或满足其 和 约束条件所需的最小单元格数(在搭载 Android 11 [API 级别 30] 或更低版本的设备上)。

单元格的宽度和高度以及应用到微件的自动外边距的大小可能会因设备而异。您可以使用下表根据所需占用的网格单元格数大致估算典型 5x4 网格手机构中的微件的最小尺寸:

单元格数量(宽 x 高) 竖屏模式下的可用尺寸 (dp) 横屏模式下的可用尺寸 (dp) 1x1 57x102dp 127x51dp 2x1 130x102dp 269x51dp 3x1 203x102dp 412x51dp 4x1 276x102dp 554x51dp 5x1 349x102dp 697x51dp 5x2 349x220dp 697x117dp 5x3 349x337dp 697x184dp 5x4 349x455dp 697x250dp ... ... ... n x m (73n - 16) x (118m - 16) (142n - 15)x(66m - 15)

使用纵向模式单元格大小来确定您为 、 和 属性提供的值。同样,请使用横屏模式单元格大小来确定您为 、 和 属性提供的值。

这是因为,在竖屏模式下,单元格的宽度通常比在横屏模式下小;同样,在横屏模式下,单元格的高度通常比在竖屏模式下小。

例如,如果您希望在 Google Pixel 4 上将微件宽度调整为最小 1 个单元格,则需要将 设置为最多 56dp,以确保 属性的值小于 57dp,因为单元格的纵向宽度至少为 57dp。同样,如果您希望 widget 高度在同一设备上的一个单元格中可调整大小,则需要将 设置为不小于 50dp,以确保 属性的值小于 51dp,因为在横屏模式下,一个单元格的高度至少为 51dp。

每个微件都可以在 / 和 / 属性之间的尺寸范围内调整大小,这意味着它需要适应这两个属性之间的任何尺寸范围。

例如,如需设置 widget 在放置时的默认大小,您可以设置以下属性:

这意味着,widget 的默认大小为 3x2 个单元格(由 和 属性指定);对于搭载 Android 11 或更低版本的设备,则为 180×110dp(由 和 指定)。在后一种情况下,单元格中的大小可能因设备而异。

此外,如需设置 widget 支持的尺寸范围,您可以设置以下属性:

如前面的属性所指定,该 widget 的宽度可从 180dp 调整到 530dp,其高度可从 110dp 调整到 450dp。然后,只要满足以下条件,该 widget 的尺寸可以从 3x2 到 5x2 的单元格大小:

  • 设备采用 5x4 网格。
  • 单元格数量与可用大小(以 dps 为单位)之间的映射遵循此页面中显示最小尺寸估算值的表格。
  • 该微件会根据该尺寸范围进行调整。

假设该 widget 使用上述代码段中定义的自适应布局。这意味着,指定为 的布局在 180dp () x 110dp () 到 269x279dp(下一个截断点 - 1)之间使用。同样, 适用于 270x110dp 到 270x279dp, 适用于 270x280dp 到 530dp () x 450dp ()。

当用户调整 widget 的大小时,其外观会根据单元格中的每种大小而发生变化,如以下示例所示。

最小 3x2 网格大小的天气 widget 示例。界面显示了地点名称(东京)、温度(14°)和表示天气为部分多云的符号。
图 2. 3x2 。

尺寸为 4x2“中等”的天气 widget 示例。以这种方式调整微件的大小是在基于上一个微件大小的所有界面的基础上,并添加“大部分多云”标签以及下午 4 点到晚上 7 点的温度预测。
图 3. 4x2 。

尺寸为 5x2 的“中等”天气 widget 示例。以这种方式调整 widget 大小会产生与之前大小相同的界面,只不过它会被拉伸一个单元格的长度,以占用更多水平空间。
图 4. 5x2 。

尺寸为 5x3“大”的天气 widget 示例。以这种方式调整微件的大小会基于之前的微件大小的所有界面进行构建,并在微件中添加一个视图,其中包含星期二和星期三的天气预报。表示天气晴朗或阴雨以及每天高温和低温的符号。
图 5. 5x3 。

尺寸为 5x4 的“大”天气微件示例。以这种方式调整微件的大小会基于之前的微件大小的所有界面,并添加星期四和星期五(以及表示天气类型以及每天最高和最低温度的相应符号)。
图 6. 5x4 。
到此这篇gridview自适应宽度(grid布局自适应)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • swagger2注解无效(swagger2常用注解)2025-02-15 23:54:06
  • 群晖root密码忘记(群晖root密码忘记了)2025-02-15 23:54:06
  • redhat操作系统日志(redhat日志外发配置)2025-02-15 23:54:06
  • traceable什么牌子(traceable什么牌子鞋)2025-02-15 23:54:06
  • incrna是什么意思(inc是什么意思的缩写)2025-02-15 23:54:06
  • swagger2配置登录(swagger2 ui)2025-02-15 23:54:06
  • argparser怎么下载(安装argparse)2025-02-15 23:54:06
  • 数组方法filter返回值(数组的filter方法会改变原数组吗)2025-02-15 23:54:06
  • zipentry(zipentry转file)2025-02-15 23:54:06
  • vcorn什么意思(vcoros是什么意思)2025-02-15 23:54:06
  • 全屏图片