Меню параметров Android не отображается

Я делаю игру для 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;
    }

рез\меню\меню.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>

person GideonKain    schedule 30.08.2011    source источник
comment
если вы добавите оператор журнала в метод oncreateoptions, вы его увидите?   -  person Kevin Qiu    schedule 30.08.2011


Ответы (3)


Убедитесь, что у вас есть заголовок во всех пунктах меню!

Элементы без заголовка, я думаю, могут отображаться в панели действий, но не в виде списка при нажатии кнопки меню. Ниже приведен простой пример..

<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" />
person Toni Makkonen    schedule 12.05.2014

Насколько я вижу, если с кодом и файлами ресурсов меню все в порядке, то причина не в добавлении дополнительной директории ресурсов стилей для низкоуровневого 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>

А) 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 11 с именем values-v11 и добавил для него дополнительный файл styles.xml.

РЕШЕНИЕ 1

D) Файл ресурсов для уровня API 11

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

Тогда это работает!

Вот моя рабочая конфигурация, чтобы создать две отдельные папки для ресурса значений, я выбрал параметр Project в Android;

введите здесь описание изображения

РЕШЕНИЕ 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. Даже этот вопрос кажется таким старым, что он еще не устарел. Я надеюсь, что этот ответ поможет кому-то, потому что эта проблема сводила меня с ума, пока я не нашел эмпирическое решение, надеюсь, что это поможет. Удачного кодирования!

person Levent Divilioglu    schedule 16.06.2016

Непосредственно мы можем добавить пункты меню, подобные этому, у меня это работает нормально

     @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;
}
person sravan    schedule 30.11.2011