@blog.justoneplanet.info

日々勉強

Say Goodbye to the Menu Button

Say Goodbye to the Menu Button(原文)の記事を途中まで結構適当に翻訳してます。何か問題がありましたらお知らせください。

Android 3.0 (Honeycomb)以前、全てのAndroidデバイスはメニューに専用のメニューボタンを含有していた。開発者として、関連したオプションをユーザに表示するためやアクティビティのビルトインオプションメニューを使うためにメニューボタンを使うことができた。Honeycombは物理的ボタンへの依存をやめ、ユーザーオプションからのアクションを素早く表示させる一般的な解決策としてActionBarクラスを紹介した。最も直感的で一貫性のあるユーザーエクスペリエンスを提供するために、デザインをメニューボタンの使用からアクションバーの使用に移行するべきである。これは新しいコンセプトではない(アクションバーパターンはHoneycomb以前のAndroidにもあった)。しかしICSの登場によっはより、重要なのは一貫性のあるAndroidユーザーエクスペリエンスを進展させるためにアクションバーを使ったデザインに移行し始めることだ。

Honeycombより古いAndroidもサポートする必要があるので、アクションバーの使用は大変なんじゃないかと心配するかもしれない。しかしながら、Honeycomb以前のデバイスでメニューボタンをサポートし続けることができるのでシンプルであり、新しいデバイスでは少しコードを変えるだけでアクションバーを提供できる。

一言であらわすならば、targetSdkVersionを14にして、オプションメニューを使うならば、アクションバーの一部のアクションにshowAsAction=”ifRoom”を記述するだけである。

■Don’t call it a menu

ハードウェアメニューボタンに依存するのをやめるだけでなく、メニューボタンを使ったアクティビティについて考えるのを完全にやめるべきである。アクションバー野中に重要なユーザーアクション用のボタンを与えるべきである。

以下のスクリーンショットにおいて、検索用のアクションボタンやアクションバーの右側にアクションオーバーフローを見ることができる。

Android 3.0以降で動作するとき、例えAndroid 3.0以前のバージョンをサポートする(ユーザーオプション・アクションを表示するオプションメニューを使う典型的な)アプリケーションでも、メニューボタンはない。システム・ナビゲーションに出るボタンはレガシーアプリケーションのためにオーバーフローアクションとなる。

これは専門用語を超えた細かいことにこだわっているように見えるかもしれないが、アクションオーバーフローという名前は異なった考え方を促進させる。様々なユーザーオプションを包括したメニューの思考の代わりに、アクションとしてスクリーンに表示したいユーザーオプションがどれなのかをもっと考えるべきである。スクリーンにあるべきでないものは画面にオーバーフローして表示できる。ユーザーは、スクリーン上のアクションボタンと平行して表示されるオーバーフローやオーバーフローボタンをタッチすることによってオーバーフローする他のオプションを見せることができる。

■Action overflow button for legacy apps

もしもあなたが既にAndroid 2.3以下をサポートするアプリを開発していて、HoneycombやGalaxy Nexusのようなハードウェアメニューボタンがないデバイス上で動作するとき、システムがシステムナビゲーションのそばにオーバーフローアクションを付加することに気づいたかもしれない。

これはメニューボタンを使ったアプリが機能するようにデザインされたレガシーアプリのための互換性である。しかしながら、このボタンは理想的なユーザーエクスペリエンスを提供しない。実際、オプションメニューを全く使っていないアプリでは、オーバーフローアクションボタンは何もせず混乱を生む。だからAndroid 3.0以上で動作し必要ならばActionBarを使うとき、ナビゲーションバーからオーバーフローアクションを除去するためにレガシーアプリをアップデートするべきである。アプリケーションが現在サポートするデバイスとの下位互換性を維持しながら、全て行うことができる。

You can do so all while remaining [[backward compatible with the devices] [your apps currently support]].

もしアプリがメニューボタンなしに動作するならば、manifest要素の<uses-sdk>の中でサポートするように宣言したAPIレベルに基づいて、システムはオーバフローアクションをナビゲーションバーに加えるかどうか判断する。ロジックは以下のとおりである。

  1. minSdkVersionもしくはtargetSdkVersionを11以上にした時、システムはレガシーオーバーフローボタンを付加しない
  2. さもなければ、Android 3.0以上で起動時にシステムはレガシーオーバーフローボタンを付加する。
  3. 例外は、minSdkVersionが10以下でtargetSdkVersionが11,12,13でありActionBarを使っていないとき、Android 4.0以上で動作時にシステムはレガシーオーバーフローボタンを付加する

この例外はちょっと混乱するかもしれないが、Honeycomb以前のハンドセットとHoneycombのタブレットをサポートするアプリをデザインしたならば、ハンドセットデバイスはメニューボタンを含有しただろうという信頼に基づいている。

従って、オーバーフローアクションボタンがシステムナビゲーションのそばに表示されないことを保証するために、targetSdkVersionを14にするべきである。(古いデバイスをサポートし続けるために、minSdkVersionを記述することができる。)

■Migrating to the action bar

もしonCreateOptionsMenuを実装しているオプションメニューを使ったアクティビティを使っていて(targetSdkVersionを14にセットすることによって)システム・ナビゲーションバーからレガシーオーバーフローボタンが消えるならば、ユーザーがアクティビティのアクションとオプションにアクセスする代替手段を提供する必要がある。

スペースが得られるときにアクションバーにそれらを表示するためにアクティビティの最も重要なアクションを提供する<item>要素にshowAsAction=”ifRoom”を加える。どのアクションがアクションバーで表示されるかの優先順位を決定するための助けを得るには、Android Design’s Action Bar guideを見て欲しい。

アクションバーで一貫したユーザーエクスペリメントを更に提供するために、Android UX Teamによってデザインされたアクションアイコンを使うことを提案する。入手できるアイコンは共通のリフレッシュや削除・アタッチ・スター・共有・などのユーザーの共通アクションをサポートし、デザインはライトとダークのHoloテーマをサポートする。Here they are!

もしこれらのアイコンが必要としているものに適合せず作る必要がある場合、Iconography design guideを見るべきである。

■Removing the action bar

もしもアクションバーを必要としないならば、アプリ全体もしくはアクティビティごとに取り除くことができる。(ゲームのような)オプションメニューが使われないアプリやデザイン性に適合しないアプリに適している。Theme.Holo.NoActionBarやTheme.DeviceDefault.NoActionBarのようなテーマを使うことでアクションバーを取り除くことができる。

そのようなテーマを使い後方互換性を残すために、Adam Powell’s postで書かれているように、異なったプラットフォームバージョンに異なったテーマを定義するアンドロイドのリソースシステムが使える。必要なのは現在のプラットフォームバージョンに応じて継承した異なったプラットフォームテーマを定義したあなたのテーマだけである。

例えば、こんな感じであなたのアプリケーションにカスタムテーマを宣言できる。

<application android:theme="@style/NoActionBar">

もしくは代わりに個々の<activity>要素でテーマを宣言できる。

Honeycomb以前のデバイスのために、スタンダードプラットフォームテーマを継承するres/values/themes.xmlで以下のテーマをインクルードして欲しい。

<resources>
    <style name="NoActionBar" parent="@android:style/Theme">
        <!-- Inherits the default theme for pre-HC (no action bar) -->
    </style>
</resources>

Honeycomb以降のために、NoActionBarテーマを継承したres/values-v11/themes.xmlで以下のテーマをインクルードして欲しい。

<resources>
    <style name="NoActionBar" parent="@android:style/Theme.Holo.NoActionBar">
        <!-- Inherits the Holo theme with no action bar; no other styles needed. -->
    </style>
</resources>

実行時に、システムはシステムのAPIバージョンに基づいたNoActionBarテーマに適合したバージョンを適用する。

■Summary

  • Androidはもはや専用のメニューボタンを要求しないし、いくつかのデバイスはメニューボタンを持たず、メニューボタンを使う手法から移行すべきである
  • targetSdkVersionを14にセットしてAndroid 4.0でアプリをテストする
  • アクションバーに表示したいメニューにshowAsAction=”ifRoom”を加える
  • アクションバーを動作させたくないならば、Theme.Holo.NoActionBarやTheme.DeviceDefault.NoActionBarを用いることで消すことができる

アクションバーをどうデザインするべきかについてはAndroid Design’s Action Bar guideを参照して欲しい。アクションバーの実装についてのより多くの情報はAction Bar developer guideで入手できる。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment