Как создать меню параметров для действия с помощью AndroidX?

Прочитав большую часть официальной документации по Android, я столкнулся с проблемой настройки панели приложений без с использованием Объект панели инструментов. Как ни странно, эта официальная страница в меню ссылается на использование объекта Toolbar в методе onCreate(). Хотя в недавнем прошлом у меня была панель инструментов для работы, мне не нужна дополнительная гибкость/настройка объекта панели инструментов, и вместо этого я предпочитаю использовать различные XML-файлы меню для своих действий. Проблема в: мой код для меню опций не создает никакой панели приложений... он создает только пустой белый экран с панелью задач (батареи/времени) сверху.

Общие примечания: я не собираюсь поддерживать старые SDK (< 7). Кроме того, телефон, которым я пользуюсь (LG Stylo3 7.0), НЕ имеет аппаратной кнопки меню. Я стремлюсь поддерживать minSdkVersion 21 с targetSdkVersion 28. Я также не расширяю фрагмент. У меня выписано много других активностей, хотя их содержимое недоступно без надлежащей навигации по меню.

Я написал следующий код/ресурсы:

приложение/[пакет]/MainActivity.java

package [package];

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity;    
import [package].R;

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) {
//        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;

Примечание: я пробовал вызывать super в onCreateOptionsMenu(), а также вызывать его в операторе return. Я также пытался расширить AppCompatActivity вместо Activity, но я не собираюсь поддерживать ранние версии SDK. Я поставил точки останова в onCreateOptionsMenu(), и инструмент отладки, похоже, не останавливается на достигнутом. Возможно, onCreateOptionsMenu() не вызывается из onStart()?

рез/меню/main_menu.xml

<menu xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    tools:context = ".MainActivity" >

    <item android:id = "@+id/action_servers"
        android:icon = "@drawable/ic_action_server"
        android:title = "@string/action_server"
        app:showAsAction = "ifRoom" />

    <item android:id = "@+id/action_settings"
        android:icon = "@drawable/ic_action_settings"
        android:title = "@string/action_settings"
        app:showAsAction = "ifRoom"/>
</menu>

Примечание: AndroidStudio может без проблем просмотреть этот xml.

рез/макет/activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:id = "@+id/swipe_container"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity">
    <!-- Some commented out stuff for now -->

</androidx.constraintlayout.widget.ConstraintLayout>

Примечание: Я создал объект панели инструментов в этом макете, до которого ДЕЙСТВИТЕЛЬНО работает только этот вопрос не о панелях инструментов. AndroidStudio позволяет мне просмотреть это, и это пустой экран.

AndroidManifest.xml

<application
    android:allowBackup = "false"
    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>

Примечание: Я пробовал разные темы android: с/без ActionBar в res/values/styles.xml... в частности: (Theme.AppCompat.Light.DarkActionBar и Theme.AppCompat.NoActionBar). Первая тема приводит к пустому белому экрану, вторая — к темно-серому.

Дайте мне знать, если другие файлы, которые я пропустил, необходимы для дальнейшей диагностики. Моя гипотеза заключается в том, что это связано с используемым ограничениемLayout.

Это страницы, которые я просмотрел, но они не помогли решить мою проблему:

  1. Реализация меню опций в Android Studio
  2. Добавить меню в пустую активность
  3. Активность не имеет меню параметров -- Не хочу использовать панель инструментов!
  4. как отобразить меню опций при запуске активности
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
2 875
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Изменение строки конструктора файла MainActivity.java для расширения AppCompatActivity

public class MainActivity extends AppCompatActivity {

и установка темы android: в вариант Theme.AppCompat * показывает панель приложения MainActivity, которую я изо всех сил пытался показать. Далее следует еще одно исследование, которое я провел, чтобы найти правильное решение.

Почему это работает... — это различия между AppCompatActivity и базовым классом Activity. AppCompatActivity наследуется от Activity, и использование одной из этих тем указывает приложению использовать собственный класс ActionBar для предоставления панели приложения. Как правило, кажется, что использование нового объекта панели инструментов — лучший способ, поскольку он позволяет больше настроек (по состоянию на 2019 год). В большинстве более ранних вопросов, связанных с этой темой, используется устаревший/устаревший код, такой как ActionBarActivity.

Это достигается путем изменения файла макета действия для включения панели инструментов в соответствии с этим документация. Затем тему панели инструментов можно соответствующим образом изменить, используя методы, выходящие за рамки этого вопроса.

Другие вопросы по теме