glance-canonical-layouts
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTo implement a widget Canonical Layout that follows the recommended design
patterns:
- The project MUST use Jetpack Glance.
- You MUST locate the requested layout from the list under Canonical Layout Reference Files.
- Copy the layout reference files into your project's target app module (e.g., and
src/main/java/) in one step to implement the exact design and reduce the number of tool calls.src/main/res/ - You MUST set override val in the widget provider class.
sizeMode: SizeMode = SizeMode.Exact - Validate that your project compiles, updating sample package declarations, import paths, and class names to match the target app's package name.
- Clean your project's widget code, removing unused classes (for example, unused buttons).
- You MUST register the widget receiver in inside
AndroidManifest.xmlafter<application>, ensuring<activity>matches the filename of the copied Widget Info XML. Otherwise, the widget won't appear in the widget picker:android:resource="@xml/..."
xml
<receiver android:name=".glance.MyReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/my_app_widget_info" />
</receiver>要实现遵循推荐设计模式的 widget Canonical Layout:
- 项目 MUST 使用 Jetpack Glance。
- 你 MUST 从 Canonical Layout Reference Files 下的列表中定位所请求的布局。
- 将布局参考文件一次性复制到项目的目标 app module(例如 和
src/main/java/)中,以实现精确设计并减少 tool call 数量。src/main/res/ - 你 MUST 在 widget provider 类中设置 override val 。
sizeMode: SizeMode = SizeMode.Exact - 验证项目能够编译,并更新 sample package declaration、import path 和 class name,以匹配目标 app 的 package name。
- 清理项目的 widget code,移除未使用的类(例如未使用的按钮)。
- 你 MUST 在 的
AndroidManifest.xml中、<application>之后注册 widget receiver,并确保<activity>与复制后的 Widget Info XML 文件名相匹配。否则,该 widget 不会出现在 widget picker 中:android:resource="@xml/..."
xml
<receiver android:name=".glance.MyReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/my_app_widget_info" />
</receiver>Dependencies
依赖项
Add Jetpack Glance dependencies to the app module's
( block):
build.gradle.ktsdependencies- or higher
androidx.glance:glance-appwidget:1.2.0 - or higher
androidx.glance:glance-material3:1.2.0 - or higher
androidx.glance:glance-appwidget-preview:1.2.0 - or higher
androidx.glance:glance-preview:1.2.0
Use version or higher with and Android Gradle
Plugin (AGP) 9.1.0 or higher (for example, in
) when implementing Snap Scrolling.
1.3.0-alpha02compileSdk = 37agp = "9.1.0"gradle/libs.versions.tomlIf copying sample data repositories that load bitmaps with Coil (such as
, , or
), also add an image loading library dependency
such as (e.g., ) if
one doesn't already exist.
FakeImageGridDataRepository.ktFakeImageTextListDataRepository.ktFakeTextWithImageRepository.ktio.coil-kt:coilimplementation("io.coil-kt:coil:2.7.0")向 app module 的
( block)中添加 Jetpack Glance 依赖项:
build.gradle.ktsdependencies- 或更高版本
androidx.glance:glance-appwidget:1.2.0 - 或更高版本
androidx.glance:glance-material3:1.2.0 - 或更高版本
androidx.glance:glance-appwidget-preview:1.2.0 - 或更高版本
androidx.glance:glance-preview:1.2.0
实现 Snap Scrolling 时,当使用 和 Android Gradle
Plugin (AGP) 9.1.0 或更高版本时(例如,在
中设置 ),请使用版本 或更高版本。
compileSdk = 37gradle/libs.versions.tomlagp = "9.1.0"1.3.0-alpha02如果复制了使用 Coil 加载 bitmap 的 sample data repository(例如
、 或
),且项目中尚未存在图片加载库依赖项,也应添加
等图片加载库依赖项(例如 )。
FakeImageGridDataRepository.ktFakeImageTextListDataRepository.ktFakeTextWithImageRepository.ktio.coil-kt:coilimplementation("io.coil-kt:coil:2.7.0")Canonical layout reference files
Canonical Layout 参考文件
Action list layout (action_list
)
action_list操作列表布局 (action_list
)
action_list- Widget Provider : ActionListAppWidget.kt
- Layout Composable : ActionListLayout.kt
- Widget Info XML : sample_action_list_widget_info.xml
- Data Repository : FakeActionListDataRepository.kt
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_action_list_preview.png, sample_home_icon.xml, sample_power_settings_icon.xml, sample_bulb_icon.xml, sample_thermostat_icon.xml, sample_ac_icon.xml, sample_door_icon.xml, sample_arrow_right_icon.xml, sample_no_data_icon.xml, sample_add_icon.xml
- Components : RoundedScrollingLazyVerticalGrid.kt, ListItem.kt, VerticalListItem.kt, RoundedScrollingLazyColumn.kt, EmptyListContent.kt, NoDataContent.kt
- Utilities : CollectionsKtx.kt, ActionUtils.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Additional References : CanonicalLayoutActivity.kt, ActionDemonstrationActivity.kt
- Guidance :
- Handle list item actions with Glance action callbacks and ensure proper state updates.
- Widget Provider : ActionListAppWidget.kt
- 布局 Composable : ActionListLayout.kt
- Widget Info XML : sample_action_list_widget_info.xml
- Data Repository : FakeActionListDataRepository.kt
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_action_list_preview.png、sample_home_icon.xml、sample_power_settings_icon.xml、sample_bulb_icon.xml、sample_thermostat_icon.xml、sample_ac_icon.xml、sample_door_icon.xml、sample_arrow_right_icon.xml、sample_no_data_icon.xml、sample_add_icon.xml
- 组件 : RoundedScrollingLazyVerticalGrid.kt、ListItem.kt、VerticalListItem.kt、RoundedScrollingLazyColumn.kt、EmptyListContent.kt、NoDataContent.kt
- 工具类 : CollectionsKtx.kt、ActionUtils.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 其他参考 : CanonicalLayoutActivity.kt、ActionDemonstrationActivity.kt
- 指导 :
- 使用 Glance action callback 处理列表项操作,并确保状态正确更新。
Check list layout (check_list
)
check_list检查列表布局 (check_list
)
check_list- Widget Provider : CheckListAppWidget.kt
- Layout Composable : CheckListLayout.kt
- Widget Info XML : sample_check_list_widget_info.xml
- Data Repository : FakeCheckListDataRepository.kt
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_check_list_preview.png, sample_pin_icon.xml, sample_checked_circle_icon.xml, sample_circle_icon.xml, sample_delete_icon.xml, sample_edit_icon.xml, sample_snooze_icon.xml, sample_no_data_icon.xml, sample_add_icon.xml
- Components : ListItem.kt, VerticalListItem.kt, RoundedScrollingLazyColumn.kt, EmptyListContent.kt, NoDataContent.kt
- Utilities : CollectionsKtx.kt, ActionUtils.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Implement checkbox state toggling using action parameters or callbacks to update collection items.
- Use Glance Action callbacks (for example, ,
actionRunCallbackorActionCallback(actionParametersOf(...)) for widget onClick parameters to handle click events like tapping a checkbox.actionStartActivity(...)
- Widget Provider : CheckListAppWidget.kt
- 布局 Composable : CheckListLayout.kt
- Widget Info XML : sample_check_list_widget_info.xml
- Data Repository : FakeCheckListDataRepository.kt
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_check_list_preview.png、sample_pin_icon.xml、sample_checked_circle_icon.xml、sample_circle_icon.xml、sample_delete_icon.xml、sample_edit_icon.xml、sample_snooze_icon.xml、sample_no_data_icon.xml、sample_add_icon.xml
- 组件 : ListItem.kt、VerticalListItem.kt、RoundedScrollingLazyColumn.kt、EmptyListContent.kt、NoDataContent.kt
- 工具类 : CollectionsKtx.kt、ActionUtils.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 使用 action parameter 或 callback 实现 checkbox 状态切换,以更新 collection item。
- 对 widget onClick parameter 使用 Glance Action callback(例如 、
actionRunCallback或ActionCallback(actionParametersOf(...)),以处理点击 checkbox 等点击事件。actionStartActivity(...)
Expressive toolbar layout (expressive_toolbar
)
expressive_toolbar富表现力工具栏布局 (expressive_toolbar
)
expressive_toolbar- Widget Provider : ExpressiveToolbarAppWidget.kt
- Layout Composable : ExpressiveToolbarLayout.kt
- Widget Info XML : sample_expressive_toolbar_widget_info.xml
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_expressive_toolbar_preview.png, four_side_cookie_background.xml, sample_edit_icon.xml, sample_share_icon.xml, sample_delete_icon.xml, sample_info_icon.xml, sample_add_icon.xml, sample_file_upload_icon.xml, sample_mic_icon.xml, sample_camera_icon.xml
- Components : Buttons.kt, LayoutComponents.kt
- Utilities : ActionUtils.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Avoid import errors: import
ColorProviderand useandroidx.glance.unit.ColorProvider.androidx.glance.color.ColorProvider(dayColor, nightColor) - Use directly for solid background colors rather than
GlanceModifier.background(Color).ColorProvider
- Avoid
- Widget Provider : ExpressiveToolbarAppWidget.kt
- 布局 Composable : ExpressiveToolbarLayout.kt
- Widget Info XML : sample_expressive_toolbar_widget_info.xml
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_expressive_toolbar_preview.png、four_side_cookie_background.xml、sample_edit_icon.xml、sample_share_icon.xml、sample_delete_icon.xml、sample_info_icon.xml、sample_add_icon.xml、sample_file_upload_icon.xml、sample_mic_icon.xml、sample_camera_icon.xml
- 组件 : Buttons.kt、LayoutComponents.kt
- 工具类 : ActionUtils.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 避免 导入错误:导入
ColorProvider,并使用androidx.glance.unit.ColorProvider。androidx.glance.color.ColorProvider(dayColor, nightColor) - 对于纯色背景,直接使用 ,而不是
GlanceModifier.background(Color)。ColorProvider
- 避免
Image grid layout (image_grid
)
image_grid图片网格布局 (image_grid
)
image_grid- Widget Provider : ImageGridAppWidget.kt
- Layout Composable : ImageGridLayout.kt
- Widget Info XML : sample_image_grid_widget_info.xml
- Data Repository : FakeImageGridDataRepository.kt
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_image_grid_preview.png, sample_placeholder_image.png, sample_grid_icon.xml, sample_refresh_icon.xml, sample_no_data_icon.xml, sample_add_icon.xml
- Components : RoundedScrollingLazyVerticalGrid.kt, EmptyListContent.kt, NoDataContent.kt, VerticalListItem.kt
- Utilities : CollectionsKtx.kt, ImageUtils.kt, ImageAspectRatio.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Use solid colors () or local drawables for image items unless an image loading library is configured or requested.
GlanceModifier.background
- Use solid colors (
- Widget Provider : ImageGridAppWidget.kt
- 布局 Composable : ImageGridLayout.kt
- Widget Info XML : sample_image_grid_widget_info.xml
- Data Repository : FakeImageGridDataRepository.kt
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_image_grid_preview.png、sample_placeholder_image.png、sample_grid_icon.xml、sample_refresh_icon.xml、sample_no_data_icon.xml、sample_add_icon.xml
- 组件 : RoundedScrollingLazyVerticalGrid.kt、EmptyListContent.kt、NoDataContent.kt、VerticalListItem.kt
- 工具类 : CollectionsKtx.kt、ImageUtils.kt、ImageAspectRatio.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 除非已配置或要求使用图片加载库,否则图片项应使用纯色()或本地 drawable。
GlanceModifier.background
- 除非已配置或要求使用图片加载库,否则图片项应使用纯色(
Image text list layout (image_text_list
)
image_text_list图文列表布局 (image_text_list
)
image_text_list- Widget Provider : ImageTextListAppWidget.kt
- Layout Composable : ImageTextListLayout.kt
- Widget Info XML : sample_image_text_list_widget_info.xml
- Data Repository : FakeImageTextListDataRepository.kt
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_image_text_list_preview.png, sample_placeholder_image.png, sample_image_icon.xml, sample_heart_icon.xml, sample_refresh_icon.xml, sample_no_data_icon.xml, sample_add_icon.xml
- Components : ListItem.kt, VerticalListItem.kt, RoundedScrollingLazyColumn.kt, EmptyListContent.kt, NoDataContent.kt
- Utilities : CollectionsKtx.kt, ImageUtils.kt, ImageAspectRatio.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Common Use Cases: News feeds, article lists, workout histories, message feeds, and vertical thumbnail lists.
- Balance list row height and text clipping when combining thumbnail images with primary and secondary text.
- Widget Provider : ImageTextListAppWidget.kt
- 布局 Composable : ImageTextListLayout.kt
- Widget Info XML : sample_image_text_list_widget_info.xml
- Data Repository : FakeImageTextListDataRepository.kt
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_image_text_list_preview.png、sample_placeholder_image.png、sample_image_icon.xml、sample_heart_icon.xml、sample_refresh_icon.xml、sample_no_data_icon.xml、sample_add_icon.xml
- 组件 : ListItem.kt、VerticalListItem.kt、RoundedScrollingLazyColumn.kt、EmptyListContent.kt、NoDataContent.kt
- 工具类 : CollectionsKtx.kt、ImageUtils.kt、ImageAspectRatio.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 常见使用场景:新闻源、文章列表、锻炼记录、消息流和纵向缩略图列表。
- 组合缩略图、主文本和次文本时,在列表行高度与文本裁剪之间取得平衡。
Long text layout (long_text
)
long_text长文本布局 (long_text
)
long_text- Widget Provider : LongTextAppWidget.kt
- Layout Composable : LongTextLayout.kt
- Widget Info XML : sample_long_text_widget_info.xml
- Data Repository : FakeLongTextRespository.kt
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_long_text_preview.png, sample_text_icon.xml, sample_refresh_icon.xml
- Utilities : FontUtils.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Import if multiplying Dp (for example,
androidx.compose.ui.unit.times).2 * padding - Follow sizing rules: ensure dimensions from dimens.xml are used for padding and typography scaling.
- Import
- Widget Provider : LongTextAppWidget.kt
- 布局 Composable : LongTextLayout.kt
- Widget Info XML : sample_long_text_widget_info.xml
- Data Repository : FakeLongTextRespository.kt
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_long_text_preview.png、sample_text_icon.xml、sample_refresh_icon.xml
- 工具类 : FontUtils.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 如果需要对 Dp 进行乘法运算(例如 ),请导入
2 * padding。androidx.compose.ui.unit.times - 遵循尺寸规则:确保 padding 和 typography scaling 使用来自 dimens.xml 的 dimensions。
- 如果需要对 Dp 进行乘法运算(例如
Search toolbar layout (search_toolbar
)
search_toolbar搜索工具栏布局 (search_toolbar
)
search_toolbar- Widget Provider : SearchToolBarAppWidget.kt
- Layout Composable : SearchToolBarLayout.kt
- Widget Info XML : sample_search_toolbar_widget_info.xml
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_search_toolbar_preview.png, sample_search_icon.xml, sample_refresh_icon.xml, sample_mic_icon.xml, sample_camera_icon.xml, sample_delete_icon.xml, sample_add_icon.xml, sample_pin_icon.xml
- Components : Buttons.kt, LayoutComponents.kt
- Utilities : ActionUtils.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Avoid import errors: import
ColorProviderand useandroidx.glance.unit.ColorProvider.androidx.glance.color.ColorProvider(dayColor, nightColor) - Use directly for solid background colors rather than
GlanceModifier.background(Color).ColorProvider
- Avoid
- Widget Provider : SearchToolBarAppWidget.kt
- 布局 Composable : SearchToolBarLayout.kt
- Widget Info XML : sample_search_toolbar_widget_info.xml
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_search_toolbar_preview.png、sample_search_icon.xml、sample_refresh_icon.xml、sample_mic_icon.xml、sample_camera_icon.xml、sample_delete_icon.xml、sample_add_icon.xml、sample_pin_icon.xml
- 组件 : Buttons.kt、LayoutComponents.kt
- 工具类 : ActionUtils.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 避免 导入错误:导入
ColorProvider,并使用androidx.glance.unit.ColorProvider。androidx.glance.color.ColorProvider(dayColor, nightColor) - 对于纯色背景,直接使用 ,而不是
GlanceModifier.background(Color)。ColorProvider
- 避免
Full-bleed image layout and snap scrolling (snap_scrolling
)
snap_scrolling全幅图片布局与 Snap Scrolling (snap_scrolling
)
snap_scrolling- Widget Provider : FullBleedImageAppWidget.kt
- Layout Composable : FullBleedImageLayout.kt
- Widget Info XML : sample_full_bleed_image_widget_info.xml
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_full_bleed_image_preview.png, sample_scrim_gradient.xml, sample_placeholder_image.png, sample_app_logo.xml, sample_info_icon.xml, sample_no_data_icon.xml
- Utilities : FontUtils.kt, ImageAspectRatio.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Set on
verticalScrollMode = VerticalScrollMode.SnapScrollMatchHeight(size.height)for Snap Scrolling.LazyColumn - Glance 1.3.0-alpha02 (or higher), Compile SDK 37 (Baklava) or higher, and Android Gradle Plugin (AGP) 9.1.0 or higher are required if implementing Snap Scrolling.
- Set override val sizeMode: SizeMode = SizeMode.Exact in the widget provider class.
- Set
- Widget Provider : FullBleedImageAppWidget.kt
- 布局 Composable : FullBleedImageLayout.kt
- Widget Info XML : sample_full_bleed_image_widget_info.xml
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_full_bleed_image_preview.png、sample_scrim_gradient.xml、sample_placeholder_image.png、sample_app_logo.xml、sample_info_icon.xml、sample_no_data_icon.xml
- 工具类 : FontUtils.kt、ImageAspectRatio.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 若要实现 Snap Scrolling,请在 上设置
LazyColumn。verticalScrollMode = VerticalScrollMode.SnapScrollMatchHeight(size.height) - 实现 Snap Scrolling 时必须使用 Glance 1.3.0-alpha02(或更高版本)、Compile SDK 37 (Baklava) 或更高版本,以及 Android Gradle Plugin (AGP) 9.1.0 或更高版本。
- 在 widget provider 类中设置 override val 。
sizeMode: SizeMode = SizeMode.Exact
- 若要实现 Snap Scrolling,请在
Standard toolbar layout (standard_toolbar
)
standard_toolbar标准工具栏布局 (standard_toolbar
)
standard_toolbar- Widget Provider : ToolBarAppWidget.kt
- Layout Composable : ToolBarLayout.kt
- Widget Info XML : sample_toolbar_widget_info.xml
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_toolbar_preview.png, sample_app_logo.xml, sample_search_icon.xml, sample_add_icon.xml, sample_edit_icon.xml, sample_share_icon.xml, sample_mic_icon.xml, sample_camera_icon.xml, sample_videocam_icon.xml
- Components : Buttons.kt, LayoutComponents.kt
- Utilities : ActionUtils.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Additional References : CanonicalLayoutActivity.kt
- Guidance :
- See Troubleshooting to avoid import errors: use androidx.glance.color.ColorProvider(dayColor, nightColor).
ColorProvider - Use GlanceModifier.background(Color) directly for solid background colors rather than .
ColorProvider
- See Troubleshooting to avoid
- Widget Provider : ToolBarAppWidget.kt
- 布局 Composable : ToolBarLayout.kt
- Widget Info XML : sample_toolbar_widget_info.xml
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_toolbar_preview.png、sample_app_logo.xml、sample_search_icon.xml、sample_add_icon.xml、sample_edit_icon.xml、sample_share_icon.xml、sample_mic_icon.xml、sample_camera_icon.xml、sample_videocam_icon.xml
- 组件 : Buttons.kt、LayoutComponents.kt
- 工具类 : ActionUtils.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 其他参考 : CanonicalLayoutActivity.kt
- 指导 :
- 参见“故障排除”以避免 导入错误:使用
ColorProvider。androidx.glance.color.ColorProvider(dayColor, nightColor) - 对于纯色背景,直接使用 ,而不是
GlanceModifier.background(Color)。ColorProvider
- 参见“故障排除”以避免
Text with image layout (text_with_image
)
text_with_image文本配图布局 (text_with_image
)
text_with_image- Widget Provider : TextWithImageAppWidget.kt
- Layout Composable : TextWithImageLayout.kt
- Widget Info XML : sample_text_with_image_widget_info.xml
- Data Repository : FakeTextWithImageRepository.kt
- Dimensions : dimens.xml
- Strings : strings.xml
- Drawables : sample_text_image_preview.png, sample_text_icon.xml, sample_refresh_icon.xml, sample_placeholder_image.png, sample_info_icon.xml, sample_no_data_icon.xml
- Utilities : FontUtils.kt, ImageAspectRatio.kt, PreviewAnnotations.kt
- Theme : Color.kt, Theme.kt, Type.kt
- Guidance :
- Follow responsive layout sizing rules to accommodate text and image side-by-side or stacked based on available widget dimensions.
- Widget Provider : TextWithImageAppWidget.kt
- 布局 Composable : TextWithImageLayout.kt
- Widget Info XML : sample_text_with_image_widget_info.xml
- Data Repository : FakeTextWithImageRepository.kt
- 尺寸 : dimens.xml
- 字符串资源 : strings.xml
- Drawable 资源 : sample_text_image_preview.png、sample_text_icon.xml、sample_refresh_icon.xml、sample_placeholder_image.png、sample_info_icon.xml、sample_no_data_icon.xml
- 工具类 : FontUtils.kt、ImageAspectRatio.kt、PreviewAnnotations.kt
- 主题 : Color.kt、Theme.kt、Type.kt
- 指导 :
- 遵循响应式布局尺寸规则,根据可用的 widget 尺寸调整文本和图片,使其并排或堆叠显示。
Troubleshooting
故障排除
- Background Colors : Use directly for solid background colors rather than
GlanceModifier.background(Color), otherwise the background will be transparent.ColorProvider - When using (outside of the background), avoid import errors :
ColorProvider- Import type:
import androidx.glance.unit.ColorProvider - Use fully qualified creator:
androidx.glance.color.ColorProvider(dayColor, nightColor)
- Import type:
- 背景颜色:对于纯色背景,直接使用 ,而不是
GlanceModifier.background(Color),否则背景将保持透明。ColorProvider - 使用 时(背景之外),避免导入错误:
ColorProvider- 导入类型:
import androidx.glance.unit.ColorProvider - 使用完全限定的创建函数:
androidx.glance.color.ColorProvider(dayColor, nightColor)
- 导入类型:
Checklist
检查清单
- [ ] Did you register the widget in the AndroidManifest?
- [ ] Did you copy the corresponding Widget Info XML file and leave the given values including ,
minWidth, andminHeightunchanged?minResizeHeight - [ ] Did you use the given Glance Theme color values from the corresponding Layout Composable file?
- [ ] Did you use dimension resource references for and
android:minWidthin appwidget-provider XML definitions?android:minHeight - [ ] Did you override in the widget provider class?
val sizeMode: SizeMode = SizeMode.Exact
- [ ] 是否已在 AndroidManifest 中注册 widget?
- [ ] 是否复制了对应的 Widget Info XML 文件,并保持给定值(包括 、
minWidth和minHeight)不变?minResizeHeight - [ ] 是否使用了对应 Layout Composable 文件中给定的 Glance Theme 颜色值?
- [ ] 是否在 appwidget-provider XML 定义中为 和
android:minWidth使用了 dimension resource reference?android:minHeight - [ ] 是否在 widget provider 类中覆盖了 ?
val sizeMode: SizeMode = SizeMode.Exact