ホーム‎ > ‎Patterns‎ > ‎

Navigation


ホームページ移転のお知らせ
1月1日にリニューアルを実施いたしました。
これに伴い、ページのURLが以下のアドレスに変更となりました。
http://android-design.teamegg.co.jp/
お手数をおかけしますが、リンク集やお気に入り登録情報などの修正をお願いします。

バックとアップのナビゲーション


一貫したナビゲーションは、一般的なユーザエクスペリエンスの重要な構成要素です。一貫性がなく、予測できない振る舞いをするナビゲーションほどユーザをイライラさせるものはありません。Android 3.0は全体的なナビゲーションの振る舞いに、重要な変化をもたらしました。バックとアップのガイドラインに配慮することで、アプリのナビゲーションがユーザにとって予想可能で信頼できるものになります。

デベロッパードキュメント
Implementing Effective Navigation

Android 2.3以前は、アプリ内でナビゲーションをサポートする、バックボタンだけに頼っていました。Android3.0のアクションバーの導入に伴い、2つ目のナビゲーションの仕組みとして、アプリアイコンと左のキャレットで構成されるアップボタンが登場しました。


アップとバック


画面間の階層関係に基づいてアプリ内を移動するために、アップボタンは使用されます。例えば、画面Aがアイテムのリストを表示し、アイテムを選択することで(アイテムの詳細を表示する)画面Bに移動する場合、画面Bは画面Aに戻るアップボタンを提供するべきです。

アプリの最上位(アプリのホーム)ではアップボタンを表示するべきではありません。

システムのバックボタンは、ユーザが最近表示した画面を履歴の新しい順にナビゲートするために使用されます。これは、一般的に画面ではなく、アプリの階層間の時間的な関係に基づいています。

前に表示した画面が現在の画面の階層の親にあたる場合、バックボタンを押すのとアップボタンを押すのは同じ結果になります。しかし、アプリ内に留まることを保証するアップボタンとは異なり、バックボタンではホーム画面や異なるアプリまで戻ることができます。


バックボタンは、画面から画面へのナビゲーションが直接関係しない、以下のような振る舞いについてもサポートします。
  • フローティングウィンドウ(ダイアログ、ポップアップ)の消去。
  • コンテキストアクションバーを取り除き、選択したアイテムの強調表示を解除します。
  • 画面キーボード(IME)を非表示にします。

あなたのアプリのナビゲーション

複数のエントリーポイントを持つ画面のナビゲーション
アプリ内のどの画面からもたどり着ける設定画面のように、特定の画面はアプリの階層内に厳密な位置を持たず、複数のエントリーポイントから入れる場合があります。このケースでは、アップボタンはバックボタンのように、直近で表示した画面に戻る必要があります。

画面内のビュー変更
画面ビューオプションを変更してもアップやバックの動作に影響しません。これはアプリの階層は変わっておらず、新しい操作履歴が作成されていないためです。
ビュー変更の例を以下に示します。
  • タブや左右のスワイプを使用したビューを切り替え
  • ドロップダウン(別名折り畳みタブ)を使用したビュー切り替え
  • リストのフィルタリング
  • リストの並べ替え
  • 表示特徴の変更(例:ズーム)

兄弟画面間のナビゲーション
アイテムリストから、いずれかのアイテムの詳細画面への移動する機能をアプリが備えている場合、リストの前後にある別のアイテムへのナビゲーションをサポートすることが多くの場合望ましいです。例えばGmailでは、スレッドで左右にスワイプすることで、同じ受信トレイにある前後のメールを簡単に表示することができます。画面のViewの切り替えを行うような場合でも、アップやバックの動作は変化しません。


しかし例外として、元のリストに結び付けられないが、選択したアイテムと関連のある詳細項目間の移動には注意を払うべきです。例えば、Playストアでの同じ開発者のアプリや、同じアーティストのアルバムを選んだ場合です。このケースでは、関連する各画面のリンクを辿るたびに履歴を作成し、バックボタンで前に見た画面に辿ります。アップボタンはこれらの関連した画面を回避し、最近見たコンテナ画面に移動させなければいけません。


詳細画面のユーザ情報に基づき、アップ動作をよりスマートにすることができます。上記のPlayストアの拡張を例に上げると、ユーザが最後に表示した本から映画に関する詳細ビューに移動したと想像してください。この場合、アップ動作によりユーザは以前に辿っていないコンテナ(映画)に移動することができます。


ホーム画面のウィジェットやノーティフィケーションからのアプリへのナビゲーション

ユーザがホーム画面から直接アプリケーションの階層の深い階層にアクセスするために、ホーム画面のウィジェットやノーティフィケーションを利用することができます。例えば、Gmailの受信トレイウィジェットと新しいメッセージの通知からは、受信画面を飛び越えて目的のスレッドを表示することができます。

いずれの場合も場合においても、アップボタンは以下のように動作します。
  • 通常はあなたのアプリ内で、ある特定の画面から遷移先の画面に到達している場合、アップはその画面にナビゲーションする必要がある。
  • それ以外の場合、アップはアプリケーションの最上位(ホーム)画面に移動する。

バックボタンの場合、タスクのバックスタックにアプリのトップ画面への完全な上向きのナビゲーションパスを挿入することにより、ナビゲーションをより予想可能にする必要があります。この動作により、ユーザがどのようにアプリに入ったのか忘れてしまった場合でも、アプリから抜ける前にアプリの一番上の画面へ無事ナビゲーションできます。

例えば、Gmailのホーム画面のウィジェットには、メール作成画面に直接移動するためのボタンがあります。 アップまたはバック動作により、メール作成画面から受信トレイにユーザは移動し、そこからもう一度バックボタンを押すことでホームに移動します。


インダイレクト・ノーティフィケーション
アプリケーションが同時に複数のイベント情報を提示する必要があるときは、単一の中継用のノーティフィケーションを使うことでユーザを導くことができます。これによりイベントを集約し、アプリの深い階層に移動することができます。このスタイルの通知は、インダイレクト・ノーティフィケーションと呼ばれます。

標準の(ダイレクト)ノーティフィケーションとは違い、中継画面でバックを押した際には、間にバックスタックを入れず、ノーティフィケーションを呼び出した画面に戻ります。中継画面からアプリに画面が戻った後は、アップやバックボタンを押しても中継画面には戻らず、通常のノーティフィケーションのアプリ内のナビゲーションに従います。

例えば、Gmailのユーザがカレンダーからインダイレクト・ノーティフィケーションを受信したとします。この通知をタッチすると、いくつかの異なるイベントのアラームを表示する中継画面がひらかれます。中継画面でバックボタンをタップすると、Gmailの画面に戻ります。特定のイベントに触れると、イベントの詳細を表示するために中継画面から離れフルカレンダーアプリに移動します。イベントの詳細を表示している時にアップとバックを押すとカレンダーの最上位レベルのビューにナビゲーションします。


ポップアップ・ノーティフィケーション
ポップアップ・ノーティフィケーションは、ノーティフィケーションドロワーを飛び越え直接表示されます。この使用頻度は低く、タイムリーなレスポンスが必要である際にのみ使われるものであり、応答にはユーザのコンテキストが中断されることを想定しておくべきです。例えば、友人からビデオチャットの招待(数秒後自動的に無効となるような招待)をユーザに通知するために、このスタイルを使用します。

ナビゲーション動作の面ではポップアップノーティフィケーションはインダイレクトノーティフィケーションの中間画面の動作に従います。バックでポップアップノーティフィケーションを閉じます。ポップアップからノーティフィケーションにナビゲーション後、アップとバックは通常のノーティフィケーションのアプリ内のナビゲーションに従います。


アプリ間のナビゲーション

Androidの大きな特徴の1つは、複数のアプリが直接相互作用することでユーザを他のアプリに直接ナビゲーションすることです。例えば、写真の撮影が必要なアプリがカメラアプリを起動し、撮影した写真を元のアプリに返すことができます。これは、簡単にほかのアプリのコードを活用できる開発者と、アクションに関する一貫した体験を楽しめるユーザの双方にとって大きなメリットです。

アプリへのアプリナビゲーションを理解するには、以下に述べるAndroidフレームワークの動作を理解することが重要です。

アクティビティ、タスク、インテント
Androidにおいて、アクティビティは、ユーザが実行可能な画面の情報と全ての関連付けられたアクションを定義するアプリケーションの構成要素です。 あなたのアプリは、あなたが作成したアクティビティやほかのアプリから再利用したアクティビティ両方の集まりです。

タスクは、ユーザが目的を達成するためのアクティビティのシーケンスです。シングルタスクは、1つのアプリのアクティビティのみで達成可能で切るかもしれませんが時には複数の異なるアプリのアクティビティが必要かもしません。

インテントは、アプリがアクションを実行する際に、ほかのアプリに補助を求めるためのメカニズムです。アプリのアクティビティは応答可能なインテントを示すことができます。「共有」のような一般的なインテントなら、そのリクエストを実行可能なさまざまなアプリをユーザはインストールしているでしょう。

例:共有をサポートするアプリ間のナビゲーション
アクティビティ、タスク、インテントがどのように連携するかを理解するため、ユーザがアプリを使って、他のアプリとコンテンツ共有をする方法を考えてみましょう。例えば、ホームからPlayストアを起動すると新しいタスクAが開きます(下図参照)。Playストアへ遷移し、宣伝されている本を見るために詳細を選択すると、ユーザは同じタスクにアクティビティのスタックを積みます。別のアプリからの共有アクションをトリガーするダイアログ(共有インテントを処理するために登録されたアクティビティ)のリストを表示して、ユーザに選択させます。


ユーザがGmailを経由し共有することを選択すると、Gmailのメール作成アクティビティがタスクA上に追加されます。(新しくタスクは作成されません。) Gmailがバックグラウンドで実行されている別のタスクが存在する場合でも、実行中のタスクは影響を受けません。

メール作成アクティビティからメッセージを送信したり、バックをタップすると本の詳細アクティビティをユーザに表示します。その後バックボタンを押すとPlayストアを通して上部の階層に遷移していき、最終的にホーム画面まで戻ります。


しかし、メール作成アクティビティからアップを選択すると、ユーザはGmailアプリにとどまります。その結果、新しいタスクBが生成され、Gmailのスレッドリストのアクティビティを表示します。新しいタスクであるタスクBは常にホームにつながり、バックを選択するとスレッドリストからホームに戻ります。


タスクAはバックグラウンドに存在するため、ユーザは後で(例えば、最近の画面から)戻ることが可能です。Gmailが既にバックグラウンドで実行されている独立したタスクを持っていた場合、それはタスクBによって置き換えられます。以前のコンテキストは、新しい目的の為に破棄されます。

あなたのアプリが、アプリの階層内の深いアクティビティとインテントを処理するために登録する場合は、アップナビゲーションを規定する為のガイダンスの"ホーム画面のウィジェットやノーティフィケーションからのアプリへのナビゲーション"を参照してください。



原文はこちら > Navigation

Except as noted, this content is licensed under Creative Commons Attribution 2.5. For details and restrictions, see the Content License.

Comments