Android 12 のウィジェットの改良

Android 12(API レベル 31)では既存の Widgets API が改善され、プラットフォームやランチャーにおけるユーザーとデベロッパーのエクスペリエンスが向上しています。このガイドでは、ウィジェットを Android 12 に対応させる方法について説明します。また、このガイドは既存のウィジェットを更新するための API のリファレンスとしてもご利用いただけます。

代替テキスト

ウィジェットが Android 12 に対応していることを確認する

Android 12 では、ウィジェットの角が丸くなっています。Android 12 以降を搭載するデバイスでアプリ ウィジェットを使用すると、ランチャーはウィジェットの背景を自動的に識別し、角が丸くなるよう切り抜きます。

このシナリオでは、次のいずれかの状況でウィジェットが正しく表示されないことがあります。

  • ウィジェットの角にコンテンツが含まれている: 角にあるコンテンツの一部が切り取られる可能性があります。

  • ウィジェットで切り抜きにくい背景を使用している。これには、透明な背景、空のビューやレイアウトなどの、切り抜きにくい特殊な背景が含まれます。この場合、使用する背景をシステムが正しく識別できない可能性があります。

ウィジェットがこの変更の影響を受ける場合は、角が丸くなるようにウィジェットを更新し(次のセクションで説明します)、適切に表示されるようにすることをおすすめします。

サンプルを使用する

Widgets API の実際の動作については、リスト ウィジェットのサンプルをご覧ください。

角の丸みを実装する

Android 12 では、system_app_widget_background_radius および system_app_widget_inner_radius システム パラメータが導入され、ウィジェットの角の丸みを設定できるようになりました。

東京の天気情報ウィジェット
図 1: ウィジェットの角の丸みとウィジェット内のビュー

1 ウィジェットの角。

2 ウィジェット内のビューの角。

詳しくは、角の丸みを実装するをご覧ください。

デバイスのテーマを追加する

Android 12 以降のウィジェットでは、ボタンや背景などのコンポーネントにデバイスのテーマカラー(ライトテーマやダークテーマなど)を使用できます。 これにより、ウィジェット間の遷移がスムーズになり、一貫性が保持されます。

詳しくは、デバイスのテーマを追加するをご覧ください。

ライトモード テーマのウィジェット
図 2: ライトモード テーマのウィジェット
ダークモード テーマのウィジェット
図 3: ダークモード テーマのウィジェット

ウィジェットを簡単にカスタマイズできるようにする

appwidget-providerconfigure 属性を使用して設定アクティビティを指定した場合、ユーザーがアプリ ウィジェットをホーム画面に追加するとすぐに、アプリ ウィジェット ホストがそのアクティビティを起動します。

Android 12 には、ユーザーが簡単に設定できるようにするための新しいオプションが追加されています。詳しくは、ユーザーがウィジェットを設定できるようにするをご覧ください。

新しい複合ボタンを追加する

Android 12 では、以下の既存のコンポーネントを使用したステートフル動作のサポートが追加されています。

このウィジェットはまだステートレスであるため、アプリが状態を保存し、状態変化イベントを登録できるようにする必要があります。

図 4: チェックボックスがあるウィジェットの例

詳しくは、ステートフル動作のサポートをご覧ください。

改良された API を使用してウィジェットのサイズとレイアウトを設定する

Android 12 以降では、ウィジェットのサイズ調整に関する追加の制約を指定したり、レスポンシブ レイアウトや正確なレイアウトを設定したりして、サイズ属性とレイアウトをきめ細かく設定できます。

詳しくは、柔軟なウィジェット レイアウトを提供するをご覧ください。

アプリのウィジェット選択ツールのエクスペリエンスを改善する

Android 12 では、動的ウィジェットのプレビューとウィジェットの説明を追加することで、アプリのウィジェット選択ツールのエクスペリエンスを改善できます。詳しくは、ウィジェット選択ツールにスケーラブルなウィジェット プレビューを追加するウィジェットの説明を追加するをご覧ください。

スムーズな遷移を有効にする

Android 12 以降では、ユーザーがウィジェットからアプリを起動すると、ランチャーにより遷移がスムーズに行われます。詳しくは、スムーズな遷移を有効にするをご覧ください。

簡素化された RemoteViews コレクションを使用する

Android 12 では、setRemoteAdapter(int viewId, RemoteViews.RemoteCollectionItems items) メソッドが追加されました。このメソッドにより、アプリは ListView の入力時にコレクションを直接渡せるようになります。以前は、ListView を使用する場合、RemoteViewsService を実装して宣言し、RemoteViewsFactory を返す必要がありました。

詳しくは、RemoteViews コレクションの使用をご覧ください。

RemoteViews のランタイム変更を使用する

Android 12 では、RemoteViews 属性のランタイム変更を可能にするいくつかの RemoteViews メソッドが追加されています。追加されたメソッドの完全なリストについては、RemoteViews API リファレンスをご覧ください。

詳しくは、RemoteViews のランタイム変更を使用するをご覧ください。