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

jam*_*esc 5 android android-menu android-actionbar

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

我有以下清单条目

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" />
Run Code Online (Sandbox Code Playgroud)

在没有硬件按钮的avd仿真器中,我看到动作栏菜单的3个点

但是如果我将目标设置为16

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
Run Code Online (Sandbox Code Playgroud)

没有操作栏

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

特别是在值-v14中,我有一个说明的styles.xml文件

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar" />
Run Code Online (Sandbox Code Playgroud)

设置主题的清单条目是

<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">
Run Code Online (Sandbox Code Playgroud)

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

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

更新我现在使用ActionBarSherlock没有问题

Jon*_*ams 5

请参阅@S先生提供的链接,Android缺少MENU按钮,了解更多关于此问题的信息.

但要回答你的问题:

我想知道是否需要为所有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主题,全屏和操作栏,了解如何执行此操作.

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