Как добавить меню опций (либо 3 точки и / или значки действий) к действию с вкладками?

#android #android-actionbar #android-optionsmenu

#Android #android-панель действий #android-optionsmenu

Вопрос:

Я начал свой проект с шаблона «Действие с вкладками» и теперь пытаюсь добавить меню опций. Я делал это раньше с пустым действием, и оно работало нормально. Насколько я могу судить, я выполнил все те же шаги, что и в документации: https://developer.android.com/guide/topics/ui/menus#options-menu

Когда я запускаю приложение, ничего не отображается. Я ожидал бы увидеть значок с 3 точками. Я также попытался добавить значки, чтобы посмотреть, будут ли они отображаться как действия. Не повезло. Вот что у меня есть в моем MainActivity.java файл:

 public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
        ViewPager viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(sectionsPagerAdapter);
        TabLayout tabs = findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);
    }

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

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId())
        {
            case R.id.settingsMenuItem:
                ShowSettings();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private void ShowSettings() {
        // TODO show settings
    }
}
 

И это XML-файл меню опций, который «options_menu_layout.xml » находится в каталоге res / menu:

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@ id/settingsMenuItem"
        android:icon="@drawable/baseline_settings_black_48"
        android:title="@string/menu_option_settings"/>
</menu>
 

Похоже, это работает с пустым действием, но не в этом действии с вкладками. Есть ли что-то, чего мне не хватает, что требуется для обеспечения их совместимости?

Ответ №1:

показать файлы xml, стиля и манифеста.

Ответ №2:

Согласно документации onCreateOptionsMenu(),

«Вы должны вернуть true для отображения панели; если вы вернете false, она не будет отображаться».

В вашем примере кода у вас есть return super.onCreateOptionsMenu(menu); .

Есть ли причина для вызова метода родительского класса? (Пример кода руководства для разработчиков Android также выполняет return true; )

Поэтому я бы сначала попытался изменить onCreateOptionsMenu() на return true; , чтобы увидеть, отображается ли меню опций, и в качестве следующего шага изучите необходимость вызова родительского класса super.onCreateOptionsMenu (menu).

Ответ №3:

Оказывается, при использовании шаблона «Действие с вкладками» в файле манифеста используется версия темы «NoActionBar». Я удалил последнюю часть этой строки:

 android:theme="@style/Theme.ExampleApp.NoActionBar">
 

Итак, это вместо:

 android:theme="@style/Theme.ExampleApp">