Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Wear 向けのカスタム レイアウトを作成する

Wear OS by Google 搭載のスマートウォッチ用のレイアウトの作成は、画面サイズと視認性を考慮してデザインする必要があることを除き、スマートフォン用のレイアウトの作成に似ています。スマートフォン アプリの機能や UI をスマートウォッチに移植しても優れた操作性は期待できません。

カスタム レイアウトは必要な場合にだけ作成してください。優れたスマートウォッチ アプリを設計する方法については、Wear OS の設計ガイドラインをご覧ください。

カスタム通知を作成する

一般に、スマートフォンで作成した通知はウェアラブルに自動的に同期させる必要があります。こうすることで、作成した通知をさまざまなタイプのデバイス(スマートウォッチだけでなく、Auto や TV も含む)で表示できるようになります。しかも、各種のフォーム ファクタに合わせて設計する必要はありません。

標準の通知スタイル(NotificationCompat.BigTextStyleNotificationCompat.InboxStyle など)を使用できない場合は、カスタム レイアウトでアクティビティを表示できます。カスタム通知の作成と発行はスマートウォッチでのみ行うことができます。これらの通知はスマートフォンには同期されません。

注: スマートウォッチでカスタム通知を作成する場合、サポート ライブラリの代わりに標準の通知 API(API レベル 20)を使用できます。

カスタム通知を作成する手順は次のとおりです。

  1. レイアウトを作成し、表示するアクティビティのコンテンツ ビューとして設定します。

    Kotlin

        override fun onCreate(savedInstanceState: Bundle?) {
            ...
            setContentView(R.layout.notification_activity)
        }
        

    Java

        public void onCreate(Bundle bundle){
            ...
            setContentView(R.layout.notification_activity);
        }
        
  2. Android のマニフェストでアクティビティに必要なプロパティを定義し、スマートウォッチのコンテキスト ストリーム プロセスでアクティビティを表示できるようにします。アクティビティのエクスポートと埋め込みを行えるように宣言し、空のタスク アフィニティを用意する必要があります。また、テーマは Theme.DeviceDefault.Light に設定することをおすすめします。以下に例を示します。
        <activity android:name="com.example.MyDisplayActivity"
            android:exported="true"
            android:allowEmbedded="true"
            android:taskAffinity=""
            android:theme="@android:style/Theme.DeviceDefault.Light" />
        
  3. 表示するアクティビティの PendingIntent を作成します。以下に例を示します。

    Kotlin

        val notificationPendingIntent: PendingIntent =
                Intent(this, NotificationActivity::class.java).let { notificationIntent ->
                    PendingIntent.getActivity(
                            this,
                            0,
                            notificationIntent,
                            PendingIntent.FLAG_UPDATE_CURRENT
                    )
                }
        

    Java

        Intent notificationIntent = new Intent(this, NotificationActivity.class);
        PendingIntent notificationPendingIntent = PendingIntent.getActivity(
                this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        
  4. Notification を作成し、PendingIntent を指定して setDisplayIntent() を呼び出します。ユーザーが通知を表示するとき、システムはこの PendingIntent を使用してアクティビティを開始します。
  5. notify() メソッドを使用して通知を発行します。

    注: Wear 1.x では、ホーム画面に通知をポップアップ表示する場合、システムは通知のセマンティック データから生成する標準テンプレートを使用して通知を表示します。このテンプレートはすべてのウォッチフェイスで正常に動作します。ユーザーが通知を上にスワイプすると、通知のカスタム アクティビティが表示されます。

Wear UI ライブラリを使用してレイアウトを作成する

Android Studio の Project Wizard でスマートウォッチ アプリを作成すると、Wear UI ライブラリが自動的にインクルードされます。また、次の依存関係宣言を使用して、このライブラリを build.gradle ファイルに追加することもできます。

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:wear:26.0.0'
        compile 'com.google.android.gms:play-services-wearable:+'
    }
    

このライブラリは、スマートウォッチの UI を構築するのに役立ちます。詳しくは、Wear デバイスのカスタム UI を作成するをご覧ください。

主なクラスの一部を以下に示します。

BoxInsetLayout
画面の形状を認識する FrameLayout オブジェクト。円形画面の中心の正方形内にその子を配置できます。
ConfirmationActivity
ユーザーが操作を完了した後に確認用のアニメーションを表示するアクティビティ。
AnimationSet
一緒に再生する必要があるアニメーションのグループ。
CircularProgressLayout
子ビューを中心とした円形のカウントダウン タイマーを表示するレイアウト。通常、短い遅延が発生した後の動作を確認するための自動タイマーとして使用されます。
SnapHelper
SnapHelperRecyclerView オブジェクトのスナップをサポートしています。
PagerSnapHelper
縦向きまたは横向きでのページャ スタイルのスナップをサポートする SnapHelper インスタンスの実装。
AlertDialog
Dialog のサブクラス。このサブクラスでは、1、2、または 3 個のボタンを表示できます。
ProgressBar
処理がどこまで進んだかを示すバーをユーザーに表示します。アプリは、処理の進捗に合わせて進捗量(バーの長さ)を変更できます。
WearableRecyclerView
RecyclerView クラスのウェアラブル固有の実装。スクロール可能なアイテムリストを正方形および円形のデバイスに表示する場合に使用します。

Wear UI ライブラリ API リファレンス

リファレンス ドキュメントで各 UI ウィジェットの使用方法が詳しく説明されています。Wear API リファレンス ドキュメントで上記のクラスの詳細をご確認ください。

注: Wear OS の開発には Android Studio を使用することをおすすめします。Android Studio では、プロジェクトのセットアップ、ライブラリのインクルード、パッケージングを容易に行うことができます。