当目标SDK版本大于10时,Android操作栏菜单没有显示。为什么?

5

我有一个应用程序广泛使用的菜单,但并不总是显示。具体来说,我的问题是当我将目标SDK版本设置为16时,对于没有硬件菜单按钮的设备,应该出现的三个点(操作栏?)实际上没有出现。

我有以下清单条目:

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

在一个没有硬件按钮的 avd 模拟器中,我可以看到用于操作栏菜单的三个点。但如果将目标设置为 16,则……
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />

没有操作栏出现

我在各种资源文件夹(values、values-v11和values-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没有问题。


@RajeshRajaram 这并没有回答我的问题。无论如何还是谢谢。 - jamesc
2
我遇到了同样的问题。我认为这个链接很好地描述了这个问题。 - Mr.S
你好,能否请您解释一下如何修复使用Android-SherlockBar的问题?我正在使用这个库,但是无法显示三个点的溢出菜单。最小SDK设置为9,目标SDK设置为10。我的设备有一个菜单按钮。只有当我点击设备的菜单按钮时,溢出菜单才会显示在底部。是否有任何解决方法可以在使用actionbarsherlock时显示三个点图标的溢出菜单?非常感谢! - idish
@idish 将您的目标设置为16或其他值。我目前使用的是18,即android:targetSdkVersion="18"。当需要时,溢出菜单将出现。我仍然在成功地使用actionbar sherlock。 - jamesc
@idish 我在下面的答案中添加了一条注释,但首先需要确保您的设备提供软按钮,而有些设备可能没有。其次,目标SDK版本需要设置为10或以下,正如我在答案中所解释的那样。(不像jamesw建议您可以使用任何东西,这是不正确的,无论如何这个软件按钮hack都是如此。) - Jon Adams
显示剩余2条评论
1个回答

5

请查看@Mr.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个点)菜单出现而采取的正确方法应该是什么。”
如果活动是全屏的,则任何API级别(最小或目标)高于10都会导致点消失。唯一的解决办法是编写自己的菜单系统,或使用像ActionBarSherlock这样的桥接库。
如果活动通常有标题栏,但您想将API级别设置在10以上,则必须在活动的代码中设置 Holo.Theme。请参阅此 Holo Everywhere 博客文章和 Android theme, fullscreen and the action bar 了解如何执行此操作。
更新:请注意,较新的 Android 硬件指南不需要硬件菜单按钮。而这个 hack 只适用于使用软按钮(如 Nexus 7)的设备。对于既不提供硬件按钮也不提供软件按钮的设备(例如许多 HTC 设备),则用户没有办法进入菜单,即使使用此方法也不行。强烈建议切换到操作栏概念。

请注意,新设备通常配备仅具有硬件按钮而没有菜单按钮。因此,即使使用此方法,菜单功能也无法访问。现在强烈建议切换到操作栏。 - Jon Adams
哦!非常抱歉,但正是因为这种事情我“喜欢”安卓……动作栏非常好。但如果我切换到全屏模式!溢出菜单就无法访问了(我的设备没有硬件菜单按钮)。如果我们在安卓中已经实现了ActionBars,那么使用第三方栏是一步后退的解决方法。 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接