ナビゲーション

Compose をお試しください
Wear OS で Jetpack Compose を使用することは、Wear OS で推奨される UI ツールキットです。

ユーザー ジャーニーごとに個別の画面を設計すると、縦型画面または単一 画面がいくつか作成されることがあります。 次に、これらの画面が連携して動作するように設計する方法と、ナビゲーションを実装する方法を決定する必要があります。

デザイン

アプリのデザイン ガイドラインで説明されているように、アプリの階層を浅く、線形に保ちます。

まず、アプリのランチャーで最も一般的なユーザー ジャーニーを開く必要があります。各ユーザー ジャーニー は、最も重要なコンテンツを上部に配置して設計します。縦型コンテナの場合は、下部を使用して 他のあまり一般的でないユーザー ジャーニーや設定にリンクします。

図 1.縦型コンテナの最上部に最も重要なコンテンツを配置します。

ユーザーが画面のいずれかにアクセスしたときに、スワイプして閉じる操作 でバックスタックを下に移動できるようにします。

ナビゲーションを実装する

ナビゲーションを実装する場合、次のセクションで説明する 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 をルートとして使用し、dismiss アクションを手動で使用してナビゲーション グラフに戻ります。
  • フラグメントを重ねてレンダリングするカスタム FragmentNavigator を実装します。