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以降のスーマートフォン(ハンドセット)端末で実行
ートするアプリ"と判断され、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" >以上です。