我正在制作一款适用于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>
答案 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添加其他样式资源目录。
这是我的设置;
<?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>
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;
}
}
<?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>
<?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文件。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
</style>
</resources>
然后它的作品!
以下是我的工作配置,为值资源制作两个不同的文件夹,我在Android中选择了Project
选项;
从 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;
}