各ユーザー ジャーニーの個々の画面を設計した後、縦型または単一の画面がいくつかある場合があります。次に、これらの画面を連携させる方法と、ナビゲーションを実装する方法を決定する必要があります。
デザイン
アプリのデザイン ガイドラインで説明されているように、アプリの階層を浅く線形に保ちます。
まず、アプリのランチャーで最も一般的なユーザー ジャーニーを開くようにします。各ユーザー ジャーニーを設計する際は、最も重要なコンテンツを上部に配置します。縦型コンテナの場合は、下部を使用して、他のあまり一般的でないユーザー ジャーニーや設定にリンクします。
ユーザーが画面のいずれかにアクセスしたときに、スワイプして閉じるジェスチャーを使用してバックスタックを下に移動できるようにします。
ナビゲーションを実装する
ナビゲーションを実装する際には、次のセクションで説明する 3 つのオプションがあります。
- アクティビティのみ(推奨されるアプローチ)
- アクティビティとフラグメント
- Jetpack Navigation
アクティビティのみ
通常、縦型画面は 1 つのレベルの深さであるため、フラグメントを使用せずにアクティビティを使用してすべての画面を実装できます。
このアプローチを強くおすすめします。コードが簡素化され、アクティビティが スワイプして閉じる操作を自動的にサポートします。また、アンビエント モードの実装も簡単になります。
注: フラグメントを使用していない場合は、アクティビティを ComponentActivity から継承します。他のアクティビティ タイプでは、Wear OS に必要のないモバイル固有の UI 要素を使用します。
アクティビティとフラグメント
Wear OS アプリのアクティビティでフラグメントを使用できますが、フラグメントを使用して浅くてフラットなアーキテクチャを作成する明確なメリットがないため、おすすめしません。
注: フラグメントを使用している場合は、FragmentActivity から継承するようにします。他のアクティビティ タイプでは、Wear OS に必要のないモバイル固有の UI 要素を使用します。
Wear OS アプリでフラグメントを使用する際の難点には、次のようなものがあります。
- スワイプして閉じる機能は自分で実装する必要があります。それ以外の場合、ユーザーがスワイプすると、アプリ全体が終了します。
-
AmbientModeを使用する場合は、正しく動作するようにカスタマイズする必要があります。AmbientModeはアクティビティに設定されているため、フラグメントを実装する際はそれを考慮する必要があります。
フラグメントでスワイプして閉じる操作をサポートするには、フラグメントを含むビューを SwipeDismissFrameLayout クラスにラップする必要があります。詳しくは、スワイプして閉じるジェスチャーをご覧ください。これにより、ユーザーはアプリで一貫したエクスペリエンスを利用できます。
注: フラグメントを使用する場合、スワイプして閉じる操作をサポートするため、FragmentManager.replace ではなく FragmentManager.add を使用してください。これにより、スワイプされた前のフラグメントが一番上のフラグメントの下に表示されるようになります。
Jetpack Navigation
Jetpack Navigation は Wear OS で動作しますが、フラグメントと同じ欠点があります。開発作業が増えるうえ、Wear OS アプリの階層は一般的に浅く線形であるため、メリットはあまりありません。アクティビティのみのアプローチが最適です。
Jetpack Navigation を最大限に活用するには、次の操作を行います。
-
すべてのフラグメントがルートとして
SwipeDismissFrameLayoutを使用し、ナビゲーション グラフを戻るために手動で閉じるアクションを使用していることを確認します。 -
フラグメントを重ねてレンダリングするカスタム
FragmentNavigatorを実装します。