Android选项菜单无法显示

时间:2011-08-30 00:39:41

标签: android menu options

我正在制作一款适用于Android的游戏,最简单的选项菜单实现不起作用 - 游戏本身是一个单独的类(Engine.java),它扩展了一个LinearLayout,所以我想知道这是不是为什么它是不可见的 - 但是另一个“顶级”@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.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>

布局\ 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>

3 个答案:

答案 0 :(得分: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" />

答案 1 :(得分: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 。即使这个问题看起来很旧,但仍然没有过时。我希望这个答案可以帮助那些人,因为这个问题让我疯狂,直到我找到经验解决方案,希望它有所帮助。快乐的编码!

答案 2 :(得分: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;
}