Код: Выделить всё
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(Const.TAG_ACTIVITY, String.format("%s BaseActivity onCreate()", this.javaClass.simpleName))
enableEdgeToEdge()
initBinding()
onActivityCreate(savedInstanceState)
observeLiveData()
}
Код: Выделить всё
override fun onActivityCreate(savedInstanceState: Bundle?) {
InsetsManager.applyBottomNavigationViewInsets(bind.bottomNavContainer)
InsetsManager.applyTutorialInsets(bind.tutorial, bind.promotionsTutorial)
}
Код: Выделить всё
object InsetsManager {
fun applyBottomNavigationViewInsets(bottomContainerView: ViewGroup) {
ViewCompat.setOnApplyWindowInsetsListener(bottomContainerView) { v, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(insets.left, insets.top, insets.right, insets.bottom)
WindowInsetsCompat.CONSUMED
}
}
fun applyTutorialInsets(view: MainPageTutorialView, promotionsTutorial: PromotionsPageTutorialView) {
ViewCompat.setOnApplyWindowInsetsListener(view) { _, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
view.insetsTop = insets.top.toFloat()
view.insetsLeft = insets.left.toFloat()
view.insetsRight = insets.right.toFloat()
view.insetsBottom = insets.bottom.toFloat()
promotionsTutorial.insetsTop = insets.top.toFloat()
promotionsTutorial.insetsBottom = insets.bottom.toFloat()
WindowInsetsCompat.CONSUMED
}
}
Все работает нормально, пока я не вызываю AppCompatDelegate.setDefaultNightMode(//независимо от того, какой режим), чтобы изменить тему например, от дня к ночи.
Затем, как и ожидалось, активность воссоздается и восстанавливается все ее состояние, включая фрагменты, но сквозное соединение больше не применяется, и setOnApplyInsetsListeners не вызывается
Что я уже проверил:
- вызывается перед setContentView()
Код: Выделить всё
enableEdgeToEdge() - setOnApplyWindowInsetsListener, вызываемый внутри onCreate() после setContentView()
- Вызывается EnableEdgeToEdge() в onStart, onResume (не сработало)
- Включил configChanges="uiMode" и вызвал EnableEdgeToEdge() внутри onConfigurationChanged() и вручную вызвал recreate() (не сработало)
- У меня был launchMode="singleTop" в моем AndroidManifest.xml, попробовал его удалить (не сработало)
Вот несколько примеров.
Темный режим включен (
Код: Выделить всё
AppCompatDelegate.MODE_NIGHT_YES
Светлый режим включен (
Код: Выделить всё
AppCompatDelegate.MODE_NIGHT_NO(Не обращайте внимания на isAppearanceLightStatusBar, я исправлю это позже)

Подробнее здесь: https://stackoverflow.com/questions/793 ... -setdefaul
Мобильная версия