El menú de opciones de Android no se muestra

Estoy haciendo un juego para Android y la implementación más simple de un menú de opciones no funciona – el juego en sí está en una clase separada (Engine.java), que se extiende un LinearLayout, así que me pregunto si es por eso que no es Visible – sin embargo el otro "nivel superior" @Overrides como onStop (), onPause (), etc todo el fuego muy bien – ¿hay algo que tengo que hacer dentro de mi clase de juego para que muestre un menú de opciones?

La base de código es de Pro Juegos Android SpaceBlaster ejemplo: http://www.apress.com/9781430226475 (fuente se puede descargar)

MyGame.class (punto de entrada de la aplicación):

@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> 

Asegúrese de tener un título en todos sus elementos de menú!

Los ítems sin título, supongo, se pueden mostrar en la barra de acción pero no como una lista al presionar el botón de menú. A continuación se muestra un ejemplo sencillo.

 <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" /> 

Por lo que puedo ver, si todo está bien con el código y los archivos de recursos del menú, la razón no es añadir el directorio de recursos de estilos adicionales para una API de bajo nivel.

Aquí está mi juego;

Archivo 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) Archivo de recursos para el menú

 <?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) Archivo de recursos: 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> 

Todo parece bien con estos derecho? Pero incluso con éstos, el menú de las opciones no es visible. Así que he creado y los valores adicionales del directorio de recursos para la API Nivel 11, denominado values-v11, y agregó un archivo styles.xml adicional para eso.

SOLUCIÓN 1

D) Archivo de recursos para API Nivel 11

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

Entonces funciona!

Aquí está mi configuración de trabajo, para hacer dos carpetas distintas para los recursos de valores, he seleccionado la opción Project en Android;

Introduzca aquí la descripción de la imagen

SOLUCIÓN 2

Elimine la siguiente línea de definición de tema del archivo AndroidManifest.xml ;

 android:theme="@style/AppTheme" 

Así que el nuevo AndroidManifest.xml es como sigue;

 <?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> 

Soy un novato en el desarrollo de Android, utilizando Android Studio versión 2.1.2 . Incluso esta pregunta es parece tan viejo, todavía no es obsoleto. Espero que esta respuesta ayude a alguien por ahí, porque este problema me volvió loco hasta que encontré la solución empírica, espero que ayude. Codificación feliz!

Directamente podemos agregar elementos de menú como este, que funciona bien para mí

  @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; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.