(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
});



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

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

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

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

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

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