Меню настроек Android не отображается - PullRequest
4 голосов
/ 30 августа 2011

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

Ответы [ 3 ]

1 голос
/ 12 мая 2014

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

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

<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 голос
/ 16 июня 2016

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

enter image description here

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

0 голосов
/ 30 ноября 2011

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

     @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;
}
...