6

Как реализовать меню параметров в приложении для Android? Я попробовал код от Android Developer, но получаю ошибки. Например: Элемент меню должен быть объявлен. Вот мой кодРеализация опционного меню в Android Studio

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
    android:icon="@drawable/ic_new_game" 
    android:title="@string/new_game" 
    android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
    android:icon="@drawable/ic_help" 
    android:title="@string/help" /> 
</menu> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.lucavanraalte.test" > 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 

    <activity android:name=".MainActivity" android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 
</application> 

</manifest> 

enter image description here

+0

Вы кладете его в том месте, не ставьте его в Manifest.xml, но поместить его в вашем (YourActivity).xml, где вы создаете свой макет действий – Strider

+0

Я не могу сказать, как именно вы отформатировали код в своем вопросе, но любые файлы меню должны иметь свой собственный файл 'xml' в подкаталоге' menus' в ' res' - это не должно быть частью манифеста. – PPartisan

+0

Куда мне нужно положить это, и что? Нужно ли создавать новую папку? См. Изображение выше – Lucafraser

ответ

15

В коде Java, добавить onCreateOptionsMenu показать optionMenu,

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.option_menu, menu); //your file name 
     return super.onCreateOptionsMenu(menu); 
    } 

Держите в папке res \ menu \ option_menu,

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
    android:icon="@drawable/ic_new_game" 
    android:title="@string/new_game" 
    android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
    android:icon="@drawable/ic_help" 
    android:title="@string/help" /> 
</menu> 

Теперь, если вы хотите установить onOptionsItemSelected т.е. OnClick событие для этого оу можно использовать,

@Override 
    public boolean onOptionsItemSelected(final MenuItem item) { 

     switch (item.getItemId()) { 
      case android.R.id.new_game: 
       //your code 
       // EX : call intent if you want to swich to other activity 
       return true; 
      case R.id.help: 
       //your code 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
+0

Решена ли ваша проблема? @Lucafraser –

+0

Ну, проблема решена, но как мне добавить опции? И не должен ли я видеть логотип меню в своем приложении? – Lucafraser

+0

ваши варианты добавляются, если вы следуете этому коду. попробуйте запустить код и снова сообщите. –

1

Вам нужно создать папку menu в каталоге res и в директории меню создать файл с именем my_menu.xml. В этом файле пишу эти строки:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
    android:icon="@drawable/ic_new_game" 
    android:title="@string/new_game" 
    android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
    android:icon="@drawable/ic_help" 
    android:title="@string/help" /> 
</menu> 

Затем в деятельности, сделать это:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_menu, menu); 
    return true; 
} 
+0

При добавлении этой второй части в мою MainActivity.java я получаю такие ошибки, как «Не удается разрешить символ, такой как Inflater» – Lucafraser

1

Вы должны создать menu.xml в директории res-> меню, как меню

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
android:icon="@drawable/ic_new_game" 
android:title="@string/new_game" 
android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
android:icon="@drawable/ic_help" 
android:title="@string/help" /> 
</menu> 

Затем вам нужно создать меню из деятельности с кодом ниже

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id = item.getItemId(); 
    if (id == R.id.help) { 

     //do something 
     return true; 
    } 
    if (id == R.id.new_game) { 

     //do something 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
3

Вы должны использовать onCreateOptionsMenu (Menu menu)

Инициализировать содержимое меню стандартных параметров деятельности. Вы, , должны размещать элементы меню в меню.

Это вызывается только один раз, когда отображается меню опций . Чтобы обновить меню каждый раз, когда он отображается, см. onPrepareOptionsMenu (Меню).

onCreateOptionsMenu (меню Menu) метод, который необходимо переопределить в классе Activity. Это создает меню и возвращает значение Boolean. раздувание раздувает иерархию меню из XML-ресурса.

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.option_menu, menu); // set your file name 
     return super.onCreateOptionsMenu(menu); 
    } 

Ваш option_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item_First" 
      android:title="@string/item_First" 
      android:showAsAction="ifRoom"/> 
    <item android:id="@+id/save_menu" 
      android:title="@string/save" 
      android:showAsAction="ifRoom"/> 
    <item android:id="@+id/item_Second" 
      android:title="@string/item_First" 
      android:showAsAction="ifRoom"/> 

</menu> 

Пожалуйста, проверьте демо Android Option Menu Example

 Смежные вопросы

  • Нет связанных вопросов^_^