2012/07/09

Android:Menuボタンの廃止とActionBar


Android3.0 (Honeycomb)以前のアンドロイド端末はMenuボタンを備える必要がありました。
しかし、Android3.0で物理的なMenuボタンへの依存が排除されたため、Menuボタンを持た
ない端末が登場しました。


●Honeycomb以降のMenuボタンに変わるもの

Honeycomb以降は物理的なMenuボタンを持つ、あるいは持たない端末の両方をサポートする必要があります。(Menuキーを持たない端末としてGalaxy Nexusがあります)

Honeycomb以降でもオプションメニューはサポートされています。
オプションメニューにアクセスするためのUIとしてMenuボタンの代わりにActionButtonとOverflowButtonが用意されました。



●Gingerbread以前との互換性

Menuボタンを持たない端末でGingerbread以前を対象としたアプリを動作させた場合、
システムバー(Honeycomb)、ナビゲーションバー(ICS or later)にMenuボタンが表示されます。
※本稿ではActionBarのOverflowButtonと区別するためLegacyOverflowButtonと表記

(IceCreamSandwitch - ナビゲーションバー)
(Honeycomb - システムバー)

●表示されるのはOverflowButtonか?LegacyOverflowButtonか?

AndroidはOverflowMenuを表示すべきか、LegacyOverflowButtonを表示すべきかをアプリ
のuses-sdkタグで判断します。
  • targetSdkVersionが11以上(Honeycomb以降)の場合、LegacyOverflowButtonを非表示
  • これ以外の場合、Android3.0以降の端末ではLegacyOverflowButtonを表示
  • ただし、下記を全て満たす場合は例外的にLegacyMenuButtonを表示
     - minSdkVersionが10以前(つまりGingerbread以前)
     - targetSdkVersionが11~13(つまりHoneycomb~HoneycombMR2)
     - ActionBarを使用しない
     - Android4.0以降のスーマートフォン(ハンドセット)端末で実行
最後の例外については"Gingerbread以前のハンドセットとHoneycombのタブレットをサポ
ートするアプリ"と判断され、Menuキーが必要であると判断されます。

まとめると、
  • Honeycomb以降をサポートするアプリはOverflowMenuをサポートすること
  • Honeycombより前をサポートするアプリはLegacyOverflowButtonを表示
  • Gingerbread以前~HoneycombまでをサポートするアプリはLegacyOverflowButtonを表示
となります。

実際にどのように表示されるのかを下記にまとめます。

【Honeycomb以降のMenuボタンを持たない端末で...】
・Honeycomb以降をターゲットにしたアプリ
オプションメニューはActionBar内にあるActionButtonあるいはActionOverflowに集約さ
れます。ユーザはこれらのUIを通してオプションメニューにアクセスします。


・Honeycombより前をターゲットにしたアプリ
ナビゲーションバーにlegacyOverflowButtonを表示します。
これにより、Honeycomb以前をターゲットにしたアプリとの互換性を保ちます。


・Honeycombをターゲットにしたアプリ
下記全てを満たすアプリはナビゲーションバーにLegacyOverflowButtonが表示されます。
 - minSdkVersionが10以前(つまりGingerbread以前)
 - targetSdkVersionが11~13(つまりHoneycomb)
 - ActionBarを使用しない
 - Android4.0以降のスーマートフォン(ハンドセット)端末で実行

下記全てを満たすアプリは、ユーザがオプションメニューにアクセスできなくなります。
 - minSdkVersionが10以前(つまりGingerbread以前)
 - targetSdkVersionが11~13(つまりHoneycomb)
 - ActionBarを使用しない
 - Android3.x系タブレット端末で実行


・ICSをターゲットにしたアプリ
下記全てを満たすアプリは、ユーザがオプションメニューにアクセスできなくなります。
 - targetSdkVersionが14以上(つまりICS以降)
 - ActionBarを使用しない
 - Menuキーを搭載しない端末で実行


【Honeycomb以降のMenuボタンを持つ端末で...】
・Honeycomb以降をターゲットにしたアプリ
ユーザはMenuボタンを通してオプションメニューにアクセスします。
従来(Honeycombより前)と同じスタイルですが、いくつかのメニューアイテムを
ActionButtonとして提供することも可能です。



●Gingerbread以前~Honeycomb以降をサポートする

Honeycomb以降はActionBarを備えている必要があります。
しかしながら、Gingerbread以前はActionBarが搭載されていません。
この差を埋めるテクニックにシステムバージョン修飾子を使用したものがあります。

サンプルコード
・res/values/styles.xml
<resources>
    <style name="AppTheme" parent="android:Theme.Light" />
</resources>
・res/values-v11/styles.xml
<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light" />
</resources>
・AndroidManifest.xml
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
以上です。
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy