(BottomNavigationView) Стиль этого компонента требует, чтобы тема вашего приложения была Theme.AppCompat (или ее потомокAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 (BottomNavigationView) Стиль этого компонента требует, чтобы тема вашего приложения была Theme.AppCompat (или ее потомок

Сообщение Anonymous »

При использовании com.google.android.material.bottomnavigation.BottomNavigationView в макете приложения я получаю следующую ошибку:

Код: Выделить всё

Caused by: android.view.InflateException: Binary XML file line #25 in com.example:layout/activity_main: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView

Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
Обратите внимание, что это происходит ТОЛЬКО на устройствах Android 11, работающих в темном режиме. При использовании облегченного режима в Android 11 все работает нормально.
Это базовая тема приложения:

Код: Выделить всё


@color/surface


И это используется в теме/ночи:
Даже если я изменю его на Theme.AppCompat, Theme.MaterialComponents и т. д., приложение все равно вылетит.
Почему это так? Хотя светлая и темная темы будут идентичными, приложение все равно будет аварийно завершать работу в темном режиме. И этого не происходит в новых версиях Android. Пока такие проблемы возникают только в Android 11 в темном режиме.
Вот используемые версии Gradle:

Код: Выделить всё

implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
Ответы отсюда:

Стиль этого компонента требует, чтобы тема вашего приложения была Theme.MaterialComponents (или ее потомок)

не сработало.

AndroidManifest.xml: Макет действий: Активность при создании:

Код: Выделить всё

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);

// Restore the state of the currently opened fragment
if (savedInstanceState != null) {
currentFragment = getSupportFragmentManager().getFragment(savedInstanceState, "currentFragment");
}

// Navigation bar init
NavigationBarView bottomNav = findViewById(R.id.bottom_nav_menu);
// If the current fragment is null, set the default fragment to be loaded
if (currentFragment == null) {
switch (preferences.s_launchwindow) {
case SETTINGS:
currentFragment = SettingsFragment.newInstance();
bottomNav.setSelectedItemId(R.id.nav_settings);
break;
case FEED:
currentFragment = FeedFragment.newInstance();
bottomNav.setSelectedItemId(R.id.nav_feed);
break;
case SOURCES:
currentFragment = SourceFragment.newInstance(preferences);
bottomNav.setSelectedItemId(R.id.nav_content);
break;
case DISCOVER:
currentFragment = DiscoverFragment.newInstance(preferences);
bottomNav.setSelectedItemId(R.id.nav_discover);
break;
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_container, currentFragment)
.commit();
}
bottomNav.setOnItemSelectedListener(item -> {
int itemId = item.getItemId();
if (itemId == bottomNav.getSelectedItemId()) {
// The selected item is already active, do nothing
return true;
}
preferences = PreferencesManager.loadPreferences(MainActivity.this);
if (itemId == R.id.nav_settings) {
currentFragment = SettingsFragment.newInstance();
} else if (itemId == R.id.nav_feed) {
currentFragment = FeedFragment.newInstance();
} else if (itemId == R.id.nav_content) {
currentFragment = SourceFragment.newInstance(preferences);
} else if (itemId == R.id.nav_discover) {
currentFragment = DiscoverFragment.newInstance(preferences);
}

return loadFragment(currentFragment);
});

bottomNav.findViewById(R.id.nav_feed).setOnLongClickListener(v -> {
if (currentFragment instanceof FeedFragment) {
FeedFragment feedFragment = (FeedFragment) currentFragment;
feedFragment.scrollToTop();
return true; // Event has been consumed
}
return false; // Event has not been consumed
});

Решение:
Убедитесь, что все значения цвета установлены правильно в вашей теме. Если для некоторых значений, таких как textPrimary или colorAccent, установлены несуществующие значения, происходит сбой.
Кроме того, сообщение о сбое вводит в заблуждение, проблема не имеет ничего общего с темой. AppCompat

Подробнее здесь: https://stackoverflow.com/questions/781 ... heme-to-be
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»