Android 中菜单(Menu)键以及 ActionBar 相关问题

Android 进入 4.0 (ICS)版本之后,虚拟按键渐渐得到了推广。同时,传统的物理菜单键逐渐被淘汰。尤其是对于平板设备,自从 Android 3.0 版本起就不再支持实体菜单键,菜单被收纳至顶部 ActionBar 之中。这一改变事实上引起了不少版本兼容性问题。

从 Android 3.0 (Honeycomb)起,程序不得不同时考虑具备传统菜单键和不具备传统菜单键的设备。这种情况下,可以通过 Action Bar 或者 OverflowButton 实现菜单功能。

在 Android 3.0 以上的设备上运行以 Android 2.3(GingerBread)或更早版本为目标版本(Target Version)的程序时,将会自动添加 LegacyOverflowButton。这是一个显示在应用切换键图标右侧的虚拟按键,功能和物理菜单键相同。如果程序的目标版本高于 Android 2.3,则不会显示该虚拟菜单键。

不过也有一个例外。在同时满足以下条件时,上述的 LegacyOverflowButton 仍然会被显示:系统版本为 Android 4.0 或更新,且设备类型为智能手机而非平板电脑;程序的 minSdkVersion 小于 10(即 Android 2.3 或更早), targetSdkVersion 为 11~13,不使用 ActionBar。

总结来说:

  • 目标版本为 Android 3.0 或更新的程序需要通过 ActionBar 提供菜单功能。但是如果具备实体菜单键,也可以调用传统的菜单(OptionMenu)。
  • 目标版本为 Android 2.3 或更早的程序通过 legacyOverflowButton 在新版系统上提供菜单功能。
  • 目标版本为 Android 3.0~3.2,minSdkVersion 小于 10(即 Android 2.3 或更早),不使用 ActionBar 的程序,在系统版本为 Android 4.0 或更新的智能手机中通过 legacyOverflowButton 在新版系统上提供菜单功能。
  • 目标版本为 Android 3.0~3.2,minSdkVersion 小于 10(即 Android 2.3 或更早),不使用 ActionBar 的程序,在系统版本为 Android 3.x 的平板电脑上无法使用菜单功能
  • 目标版本为 Android 4.0 或更新,不使用 ActionBar 的程序,在没有物理菜单键的设备上无法使用菜单功能

如要要使目标版本为 Android 2.3 或更早的程序也能使用 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” >

发表评论

电子邮件地址不会被公开。 必填项已用*标注