Поиск…


Синтаксис

  • inflater.inflate (R.menu.your_xml_file, меню);

параметры

параметр Описание
inflate(int menuRes, Menu menu) Наполните иерархию меню из указанного ресурса XML.
getMenuInflater () Возвращает MenuInflater с этим контекстом.
onCreateOptionsMenu (Menu menu) Инициализируйте содержимое меню стандартных параметров Activity. Вы должны поместить элементы меню в меню.
onOptionsItemSelected (MenuItem item) Этот метод вызывается всякий раз, когда выбран пункт в меню параметров.

замечания

Чтобы узнать больше о меню , прочтите это . Надеюсь, поможет!

Меню опций с разделителями

В Android есть меню параметров по умолчанию, которое может принимать несколько параметров. Если необходимо отобразить большее количество параметров, то имеет смысл группировать эти параметры, чтобы сохранить ясность. Параметры можно группировать, помещая между ними разделители (то есть горизонтальные линии). Чтобы разрешить разделители, можно использовать следующую тему:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
    <item name="android:divider">@color/black</item>
    <item name="android:dividerHeight">1dp</item>
</style>

Изменив тему, в меню можно добавить разделители.

Применить пользовательский шрифт в меню

public static void applyFontToMenu(Menu m, Context mContext){
    for(int i=0;i<m.size();i++) {
        applyFontToMenuItem(m.getItem(i),mContext);
    }
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
    if(mi.hasSubMenu())
        for(int i=0;i<mi.getSubMenu().size();i++) {
            applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
        }
    Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
    SpannableString mNewTitle = new SpannableString(mi.getTitle());
    mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    mi.setTitle(mNewTitle);
}

а затем в Управлении:

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

Создание меню в действии


Чтобы определить свое собственное меню, создайте XML-файл в каталоге res/menu/ вашего проекта и создайте меню со следующими элементами:

  • <menu> : Определяет Меню, в котором хранятся все пункты меню.
  • <item> : Создает MenuItem, который представляет один элемент в меню. Мы также можем создать вложенный элемент для создания подменю.

Шаг 1:

Создайте свой собственный XML-файл следующим образом:

В res/menu/main_menu.xml :

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/aboutMenu"
        android:title="About" />
    <item
        android:id="@+id/helpMenu"
        android:title="Help" />
    <item
        android:id="@+id/signOutMenu"
        android:title="Sign Out" />
</menu>

Шаг 2:

Чтобы указать меню параметров, переопределите onCreateOptionsMenu() в своей деятельности .

В этом методе вы можете раздуть свой ресурс меню (определенный в вашем файле XML, то есть res/menu/main_menu.xml )

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

Когда пользователь выбирает элемент из меню параметров, система вызывает переопределенный onOptionsItemSelected() вашей активности .

  • Этот метод передает выбранный MenuItem.
  • Вы можете идентифицировать элемент, вызвав getItemId() , который возвращает уникальный идентификатор элемента меню (определяемый android:id attribute в ресурсе меню - res/menu/main_menu.xml ) * /
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.aboutMenu:
            Log.d(TAG, "Clicked on About!");
            // Code for About goes here
            return true;
        case R.id.helpMenu:
            Log.d(TAG, "Clicked on Help!");
            // Code for Help goes here
            return true;
        case R.id.signOutMenu:
            Log.d(TAG, "Clicked on Sign Out!");
            // SignOut method call goes here
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Обертывание!

Код вашей Activity должен выглядеть следующим образом:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "mytag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.aboutMenu:
                Log.d(TAG, "Clicked on About!");
                // Code for About goes here
                return true;
            case R.id.helpMenu:
                Log.d(TAG, "Clicked on Help!");
                // Code for Help goes here
                return true;
            case R.id.signOutMenu:
                Log.d(TAG, "User signed out");
                // SignOut method call goes here
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

Снимок экрана о том, как выглядит ваше собственное меню:

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow