by Anonymous » Yesterday, 01:44
Ich habe diesen Code, um Edge-to-Edge in meiner Basisaktivität zu aktivieren.KT-Klasse < /p>
Code: Select all
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()
}
< /code>
und dieser Code für die Aktivierung der Listener für die Anwendung der korrekten Polsterung auf die Ansichten < /p>
override fun onActivityCreate(savedInstanceState: Bundle?) {
InsetsManager.applyBottomNavigationViewInsets(bind.bottomNavContainer)
InsetsManager.applyTutorialInsets(bind.tutorial, bind.promotionsTutorial)
}
< /code>
Hier ist der Code von InsetsManager.KT < /p>
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
}
}
}
Alles funktioniert gut, bis ich AppCompatdelegate aufrufe. genannt < /p>
Was ich bereits überprüft habe: < /strong> < /p>
- is being called before setContentView()
- setOnApplyWindowInsetsListener called inside onCreate() after setContentView()
What I've already tried:[/b]
- Called enableEdgeToEdge() in onStart, onResume (didn't work)
- Enabled configChanges="uiMode" and called enableEdgeToEdge() inside onConfigurationChanged() and manually called recreate() (didn't work)
- I had a LauntMode = "Singletop" In meinem AndroidManifest.xml versuchte es zu entfernen (nicht funktioniert)
Dieser Fehler, der von mir auf einem Emulator reproduziert wurde, und einige Samsung -Geräte. Auf meinem persönlichen Pixel 9 funktioniert alles gut wie erwartet. < /P>
Hier sind einige Beispiele.
)
Light -Modus aktiviert (aktiviert (aktiviert (aktiviert
)
(Achten Sie nicht auf IsAppearancelightStatUSBAR Ich werde das später beheben)
Ich habe diesen Code, um Edge-to-Edge in meiner Basisaktivität zu aktivieren.KT-Klasse < /p>
[code]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()
}
< /code>
und dieser Code für die Aktivierung der Listener für die Anwendung der korrekten Polsterung auf die Ansichten < /p>
override fun onActivityCreate(savedInstanceState: Bundle?) {
InsetsManager.applyBottomNavigationViewInsets(bind.bottomNavContainer)
InsetsManager.applyTutorialInsets(bind.tutorial, bind.promotionsTutorial)
}
< /code>
Hier ist der Code von InsetsManager.KT < /p>
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
}
}
[/code]
}
Alles funktioniert gut, bis ich AppCompatdelegate aufrufe. genannt < /p>
[b] Was ich bereits überprüft habe: < /strong> < /p>
[list]
[*][code]enableEdgeToEdge()[/code] is being called before setContentView()
[*]setOnApplyWindowInsetsListener called inside onCreate() after setContentView()
[/list]
What I've already tried:[/b]
[list]
[*]Called enableEdgeToEdge() in onStart, onResume (didn't work)
[*]Enabled configChanges="uiMode" and called enableEdgeToEdge() inside onConfigurationChanged() and manually called recreate() (didn't work)
[*]I had a LauntMode = "Singletop" In meinem AndroidManifest.xml versuchte es zu entfernen (nicht funktioniert)
[/list]
Dieser Fehler, der von mir auf einem Emulator reproduziert wurde, und einige Samsung -Geräte. Auf meinem persönlichen Pixel 9 funktioniert alles gut wie erwartet. < /P>
Hier sind einige Beispiele.[code]AppCompatDelegate.MODE_NIGHT_YES[/code])
Light -Modus aktiviert (aktiviert (aktiviert (aktiviert[code]AppCompatDelegate.MODE_NIGHT_NO[/code])
(Achten Sie nicht auf IsAppearancelightStatUSBAR Ich werde das später beheben)