#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">