当目标sdk版本大于10时,Android Action Bar菜单没有显示。为什么?

时间:2012-09-21 13:04:43

标签: android android-actionbar android-menu

我有一个应用程序范围的菜单,并不总是显示。具体来说,我的问题是,当我将没有硬件菜单按钮的设备的目标sdk版本设置为16时,应该出现的3个点(操作栏?)不会。

我有以下明确条目

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" />

在没有硬件按钮的avd模拟器中,我看到操作栏菜单的3个点

但如果我将目标设定为16

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />

不显示操作栏

我在各种资源文件夹中设置了样式 - 值,值-v11和值-v14

,特别是在values-v14中,我有一个说明

的styles.xml文件
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />

设置主题的清单条目是

<application android:label="@string/app_name"
android:name="uk.co.pjadult.mobile.adult_reader_lib.BookLib"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">

我想知道是否需要为所有sdk版本设置包含样式的资源文件夹?

我不知道为了能够设置android:targetSdkVersion =“16”并且有动作栏(3点)菜单出现的正确方法应该是什么

更新 我现在正在使用ActionBarSherlock而没有任何问题

1 个答案:

答案 0 :(得分:5)

请参阅@S先生提供的链接Android missing MENU button,了解有关该问题的更多信息。

但要回答你的问题:

  

我想知道是否需要设置带样式的资源文件夹   对于所有sdk版本?

没有。它将采用最高可用API。例如,如果您有:

  • values.xml
  • values-v11.xml
  • values-v16.xml

以下示例Android OS API级别将使用:

  • API 4:values.xml
  • API 10:values.xml
  • API 11:values-v11.xml
  • API 13:values-v11.xml
  • API 16:values-v16.xml

等等。

  

我对于正确的方法应该是什么感到茫然   能够设置android:targetSdkVersion =“16”并拥有操作栏   (3点)菜单出现

如果活动是全屏,任何超过10的API级别(分钟或目标)都会导致点消失。解决这个问题的唯一方法是编写自己的菜单系统,或使用像ActionBarSherlock这样的填充库。

如果活动通常有标题栏,但您想将API级别设置为10以上,则必须在活动代码中设置Holo.Theme。有关如何执行此操作,请参阅此Holo Everywhere博文和Android theme, fullscreen and the action bar

更新:请注意,较新的Android硬件指南不需要硬件菜单按钮。此hack仅适用于使用软按钮的设备(如Nexus 7)。对于既不提供(例如许多HTC设备)的设备,即使有这种黑客,用户也无法进入菜单。 高度建议切换到操作栏概念。