SuperAPI AI 工具集

glance-layout-vocabulary

前端与建站

查看项目

更新于 10-17 16:15

技能介绍

该技能面向 Android 的 Glance 小部件布局。Glance 组件的外观与 Compose 接近,但会编译成 RemoteViews 树,因此每个修饰符都必须在旧视图体系中存在;不存在的修饰符就是没有。

主要缺失与影响:

  • 没有 aspectRatio。方形必须通过给同一个元素设置相同的宽和高来得到。
  • defaultWeight() 不接收参数,只能做等分,而且只作用于单一维度。在 Row 中,它只根据行的可用宽度决定宽度,高度仍按声明值保留;这是方形瓦片变成矩形的常见原因。
  • 小部件不会包裹内容;启动器给它一个单元格,它就会填满,未被占用的高度会显示为一块死色。

推荐写法:为瓦片设置固定尺寸,把权重放在瓦片之间的 Spacer 上,这样行宽变化时瓦片保持原尺寸,只有间距伸缩。用 if (index > 0) 保证只在条目之间加间隔、不在两端额外加间隔,从而保持贴边。两段式布局应让上下两条带都用 defaultWeight() 分摊剩余高度;fillMaxSize() 只用于最外层容器,否则上方条带会占满全部多余高度,下方条带被压到底边。外层容器应使用“应吸收溢出”的那条带对应的颜色。

已列出的陷阱:cornerRadius 在 API 31 以下会编译通过但不生效,圆形头像会渲染成方形;圆形半径应为 side / 2,并随瓦片尺寸变化;加权 Spacer 在只有一个条目时不存在,导致该行靠左收缩;固定尺寸瓦片下方的文字需要单独指定宽度(例如 width(TILE_SIZE + 14.dp)),否则会被截断或挤压占位符;文字和图标颜色都必须显式指定 ColorProvider,没有继承内容颜色;读取启动器实际授予的尺寸需要设置 SizeMode.Exact,默认的 SizeMode.Single 会报告声明的最小尺寸,并会丢弃尺寸调整;minResizeWidth / minResizeHeight 只影响 Single 报告的回退 minSize;resizeMode="none" 的代价是用户完全不能调整小部件。

验证方式:在应用仓库根目录设置 WIDGET_SRC 后,用 grep 检查 defaultWeight() 是否只与 Spacer 配对、检查每个 cornerRadius 附近是否有关于 API 31 以下回退方案的说明、检查 fillMaxSize() 是否只出现在容器上;然后在启动器中遍历所有声明的单元格尺寸调整小部件,并分别在零项、一项、差一项满、满项时渲染列表。资料还提到两个相关技能:remoteviews-bitmap-budget 和 glance-widget-over-existing-state。