Прочитав большую часть официальной документации по 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.
Это страницы, которые я просмотрел, но они не помогли решить мою проблему:




Изменение строки конструктора файла MainActivity.java для расширения AppCompatActivity
public class MainActivity extends AppCompatActivity {
и установка темы android: в вариант Theme.AppCompat * показывает панель приложения MainActivity, которую я изо всех сил пытался показать. Далее следует еще одно исследование, которое я провел, чтобы найти правильное решение.
Почему это работает... — это различия между AppCompatActivity и базовым классом Activity. AppCompatActivity наследуется от Activity, и использование одной из этих тем указывает приложению использовать собственный класс ActionBar для предоставления панели приложения. Как правило, кажется, что использование нового объекта панели инструментов — лучший способ, поскольку он позволяет больше настроек (по состоянию на 2019 год). В большинстве более ранних вопросов, связанных с этой темой, используется устаревший/устаревший код, такой как ActionBarActivity.
Это достигается путем изменения файла макета действия для включения панели инструментов в соответствии с этим документация. Затем тему панели инструментов можно соответствующим образом изменить, используя методы, выходящие за рамки этого вопроса.