mcpField
G
glance-canonical-layouts

glance-canonical-layouts

github.com/androidデザイン・UI10.0k237 回インストール2 日前に更新
リポジトリ

glance-canonical-layouts について

Jetpack Glance の標準レイアウトを使った Android ウィジェット実装を支援するスキルです。レイアウト選定、プロジェクト設定、ビルド確認までの手順を示します。

主な機能

  1. 01ウィジェットのレイアウト例
  2. 02依存関係とプロジェクト設定
  3. 03ウィジェットレシーバーの登録手順
  4. 04クリック処理と状態更新
  5. 05レイアウトのトラブルシューティング

活用シーン

  1. 01チェックリストやアクションリストの追加
  2. 02画像リストやグリッドの作成
  3. 03検索バーやアクションツールバーの実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/android/skills --skill glance-canonical-layouts

インストール後、Claude Code で/glance-canonical-layoutsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
ActionDemonstrationActivity.kt
CanonicalLayoutActivity.kt
CollectionsKtx.kt
references/collections/
ActionListAppWidget.kt
CheckListAppWidget.kt
ImageGridAppWidget.kt
ImageTextListAppWidget.kt
references/collections/data/
FakeActionListDataRepository.kt
FakeCheckListDataRepository.kt
FakeImageGridDataRepository.kt
FakeImageTextListDataRepository.kt
references/collections/layout/
ActionListLayout.kt
CheckListLayout.kt
EmptyListContent.kt
ImageGridLayout.kt
ImageTextListLayout.kt
ListItem.kt
NoDataContent.kt
RoundedScrollingLazyColumn.kt
RoundedScrollingLazyVerticalGrid.kt
VerticalListItem.kt
references/res/drawable/
four_side_cookie_background.xml
sample_ac_icon.xml
sample_add_icon.xml
sample_app_logo.xml
sample_arrow_right_icon.xml
sample_bulb_icon.xml
sample_camera_icon.xml
sample_checked_circle_icon.xml
sample_circle_icon.xml

詳細

推奨されるデザインパターンに従うウィジェットの Canonical Layout を実装するには、次の手順に従います。

  1. プロジェクトでは Jetpack Glance を必ず使用してください。
  2. Canonical Layout Reference Files の一覧から、指定されたレイアウトを必ず見つけてください。
  3. レイアウトのリファレンスファイルを、プロジェクトの対象アプリモジュール(例:src/main/java/ および src/main/res/)に一度にコピーして、デザインをそのまま実装し、ツール呼び出しの回数を減らしてください。
  4. ウィジェットのプロバイダークラスに override val sizeMode: SizeMode = SizeMode.Exact を必ず設定してください。
  5. プロジェクトをビルドできることを確認し、サンプルのパッケージ宣言、インポートパス、クラス名を対象アプリのパッケージ名に合わせて更新してください。
  6. プロジェクトのウィジェットコードを整理し、使用されていないクラス(例:未使用のボタン)を削除してください。
  7. ウィジェットレシーバーを AndroidManifest.xml の <application> 内で <activity> の後に必ず登録し、android:resource="@xml/..." がコピーした Widget Info 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>

依存関係

アプリモジュールの build.gradle.kts の dependencies ブロックに、Jetpack Glance の依存関係を追加してください。

  • 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 を実装する場合は、compileSdk = 37 および Android Gradle Plugin(AGP)9.1.0 以上(例:gradle/libs.versions.toml の agp = "9.1.0")と組み合わせて、1.3.0-alpha02 以上を使用してください。

Coil でビットマップを読み込むサンプルデータリポジトリ(FakeImageGridDataRepository.kt、FakeImageTextListDataRepository.kt、FakeTextWithImageRepository.kt など)をコピーする場合は、まだ追加されていなければ、io.coil-kt:coil などの画像読み込みライブラリの依存関係も追加してください(例:implementation("io.coil-kt:coil:2.7.0"))。

Canonical layout のリファレンスファイル

アクションリストレイアウト(action_list)
チェックリストレイアウト(check_list)
表現力豊かなツールバーのレイアウト(expressive_toolbar)
画像グリッドレイアウト(image_grid)
画像テキストリストレイアウト(image_text_list)
長文テキストレイアウト(long_text)
検索ツールバーのレイアウト(search_toolbar)
全面画像レイアウトとスナップスクロール(snap_scrolling)
標準ツールバーのレイアウト(standard_toolbar)
画像付きテキストのレイアウト(text_with_image)

トラブルシューティング

  1. 背景色:単色の背景色には、ColorProvider ではなく GlanceModifier.background(Color) を直接使用してください。そうしないと、背景が透明になります。
  2. ColorProvider を使用する場合(背景以外)、インポートエラーを避けるには:
    1. 型をインポートします:import androidx.glance.unit.ColorProvider
    2. 完全修飾された生成関数を使用します:androidx.glance.color.ColorProvider(dayColor, nightColor)

チェックリスト

  • [ ] ウィジェットを AndroidManifest に登録しましたか?
  • [ ] 対応する ウィジェット情報 XML ファイルをコピーし、minWidth、minHeight、minResizeHeight など、指定された値を変更せずに維持しましたか?
  • [ ] 対応する レイアウトコンポーザブル ファイルに記載された Glance テーマの色の値を使用しましたか?
  • [ ] appwidget-provider の XML 定義で、android:minWidth と android:minHeight にディメンションリソース参照を使用しましたか?
  • [ ] ウィジェットのプロバイダークラスで val sizeMode: SizeMode = SizeMode.Exact をオーバーライドしましたか?

コメント