Код: Выделить всё
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).
Это базовая тема приложения:
Код: Выделить всё
@color/surface
Код: Выделить всё
Почему это так? Хотя светлая и темная темы будут идентичными, приложение все равно будет аварийно завершать работу в темном режиме. И этого не происходит в новых версиях 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
Мобильная версия