操作栏 - 菜单按钮 - 消失

4

我成功搞砸了我的一个Android项目,可能是因为我删除了某些东西。以下是我的清单和菜单资源。不知何故,当我运行应用程序时,我的操作栏没有显示菜单按钮。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_settings"
    android:title="@string/menu_settings"
    android:orderInCategory="100"
    android:showAsAction="never" />
</menu>

清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp"
android:versionCode="6"
android:versionName="2.1.0" >

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

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

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MyActivity"
        android:label="@string/title_activity" 
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

我在我的Activity代码中也有这个。
    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.menu_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

但是当应用程序运行时,仍然没有创建菜单/选项按钮。有任何想法吗?

编辑1

经过一番试错,我发现向我的应用程序添加本地化支持导致了这个问题。

我删除了所有的本地化values-*目录,操作栏就回来了,然后我将values目录复制到values-en并在我的英语设备上运行它。然后操作栏消失了。这对任何人有所启示吗?


我不是故意要删除上一条评论的。听起来你的问题与这行代码“android:showAsAction =“never””有关。 - jnthnjns
我也认为如此,将其与具有相同菜单资源文件的项目进行了对比,该项目显示正常。我已尝试过 android:showAsAction="always",但仍然没有任何显示。 - Ne0
我从未使用过 never,这很奇怪。我的代码中总是写成 android:showAsAction="ifRoom|withText" - jnthnjns
4个回答

11

屏幕上的溢出菜单按钮只会在没有离屏MENU按钮的设备上出现在操作栏中。请尝试按下您的设备或模拟器上的MENU按钮。


在Genymotion上,您可以按Ctrl+M键来打开菜单。 - ir-tech
这适用于AndroidTV吗?请看我的问题https://stackoverflow.com/questions/65296436/alternative-for-missing-app-bar-in-android-tv - user502187
@MostowskiCollapse:这个问题以及大部分答案都是来自2012年的。在现代Android中,这些内容很少有相关性,而且我不知道当前版本的Android TV上操作栏的行为如何。抱歉! - CommonsWare
是的,确实,这是很久以前的事了。 - user502187

6

好的,我发现了导致问题的原因。如果之前有人遇到过这个问题,可能我的原始帖子中没有提供足够的信息。

我犯的致命错误是

cp -r res/values res/value-en

我已经为所有语言环境做了这件事,这也复制了styles.xml文件。在目录中有它会引起非常讨厌的头痛!将其删除,只保留res/values目录和res/values-v*目录中的styles.xml文件即可解决问题。

你正在使用哪个 API 版本? - ir-tech

0
我认为您的 onCreateOptionsMenu - MenuInflater 存在问题,请更改为以下内容,看看是否可行:
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity, menu);
    return true;
}

谢谢,我出于好奇测试了你的代码,但那段代码与我的一样。仍然没有动作栏! - Ne0
好奇怪,如果将 android:minSdkVersion="8" 更改为 android:minSdkVersion="11",因为在 API 11 中引入了 MenuInflater,会发生什么呢? - jnthnjns
2
@Asok:MenuInflater 是在 API Level 1 中引入的,而不是 11。 - CommonsWare
@CommonsWare 谢谢,我想到的是 ActionBar,对不起。 - jnthnjns

0
 android:showAsAction="never" 

将此行更改为:

 android:showAsAction="ifRoom" 

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