Android选项菜单未显示

4
我正在为Android开发一款游戏,而最简单的选项菜单实现并不起作用。由于游戏本身在一个扩展了LinearLayout的单独类(Engine.java)中,因此我想知道这是否是它看不见的原因。然而其他“顶级”@Overrides 如onStop()、onPause()等都可以正常触发。那么我是否需要在我的游戏类内部做些什么来显示选项菜单呢?
代码基础来自Pro Android Games SpaceBlaster示例: http://www.apress.com/9781430226475 (源码可供下载)
MyGame.class(应用程序入口点):
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LayoutInflater factory = LayoutInflater.from(this);

    // Set game layout
    view = factory.inflate(R.layout.main, null);
    setContentView(view);

    // Enable view key events
    view.setFocusable(true);
    view.setFocusableInTouchMode(true);

} //End OnCreate()

  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

res\menu\menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/icon"
    android:icon="@drawable/icon" />
<item android:id="@+id/text"
    android:title="Text" />
<item android:id="@+id/icontext"
    android:title="Icon and text"
    android:icon="@drawable/icon" />
</menu>

layout\main.xml:

<game.thegame.test.Engine 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_absolute"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FF000000">
</game.thegame.test.Engine>

如果你在oncreateoptions方法内添加一个日志语句,你能看到它吗? - Kevin Qiu
3个回答

1
据我所见,如果代码和菜单资源文件都没有问题,那么原因是没有为低级API添加额外的样式资源目录。
这是我的设置;
AndroidManifest.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.levent.learning.notetaker">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

A) MainActivity.java
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);

        return true;
    }

}

B)菜单资源文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/hede"
        android:title="@string/hede_item"></item>
</menu>

C)资源文件:styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
    </style>

    <style name="AppTheme" parent="AppBaseTheme">
    </style>
</resources>

这些看起来都很好,但即使有这些,选项菜单也不可见。因此,我为API Level 11创建了一个额外的值资源目录,命名为values-v11,并添加了一个额外的styles.xml文件。

解决方案1

D) 针对API Level 11的资源文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    </style>
</resources>

然后它就可以工作了!

这是我的工作配置,为了创建两个不同的值资源文件夹,我选择了 Android 中的 Project 选项;

enter image description here

解决方案2

AndroidManifest.xml文件中删除以下主题定义行;

android:theme="@style/AppTheme"

因此,新的AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.levent.learning.notetaker">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

我是一名Android开发的新手,使用的是Android Studio 2.1.2版本。即使这个问题看起来很老,但它仍然没有过时。我希望这个答案能帮助到某个人,因为这个问题曾经让我抓狂,直到我找到了实证解决方案,希望能有所帮助。编码愉快!

1

确保所有菜单项都有标题

没有标题的菜单项可能会显示在操作栏中,但在按下菜单按钮时不会显示为列表。以下是一个简单的示例..

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/main_menu" >

    <item android:id="@+id/action_undo"
      android:icon="@drawable/ic_action_undo"
      android:title="@string/mb_undo"
      android:showAsAction="always"
      android:onClick="onPressUndo" />

0

我们可以直接像这样添加菜单项,对我来说它运行得很好

     @Override
        public boolean onCreateOptionsMenu(Menu menu) 
               {
    // TODO Auto-generated method stub
    super.onCreateOptionsMenu(menu);
    MenuItem item1=menu.add(0, 4, 0,"text1");
    item1.setIcon(R.drawable.car);
    MenuItem item2=menu.add(0, 0, 0, "text2");
    item2.setIcon(R.drawable.share);
    MenuItem item3=menu.add(0, 2, 0, "text3");
    item3.setIcon(R.drawable.history);
    MenuItem item4=menu.add(0, 3, 0, "text4");
    item4.setIcon(R.drawable.settings);
    return true;
}

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