BottomNavigationView fehlt nach der Implementierung des WindowInsets-Listeners
Posted: 03 Jan 2025, 16:32
Ich versuche, den Fenstereinfügungs-Listener zu implementieren, um das Ein-/Ausblenden der Tastatur auf einem bestimmten Fragment zu überwachen. Es funktioniert gut auf dem Fragment, aber meine untere Navigation ist weg.
Hier ist mein Fragment-XML. Ich füge android:fitsSystemWindows="true" hinzu, weil es erforderlich war, dass der Insets-Listener ausgelöst wurde.
Und hier ist meine Listener-Implementierung:
Bild des Fragments, das Einfügungen implementiert, funktioniert normal.
[img]https:// i.sstatic.net/A2274mm8m.png[/img]
Hier ist der untere Navigationsbildschirm, bevor die Tastatur sichtbar ist.

Und hier ist das Bild, nachdem die Tastatur sichtbar ist.

Eigentlich, wenn ich das Verhalten beobachte. Das Problem wurde dadurch ausgelöst, dass ich von einer Symbolleiste aus zurückgekehrt bin, als die Tastatur angezeigt wurde, wodurch der Insets-Listener nie aufgerufen wurde.
Wenn ich von der Rückseite aus gedrückt habe, um die Tastatur zuerst zu schließen und dann zurück, wird der Insets-Listener ausgelöst.
Hier ist mein Fragment-XML. Ich füge android:fitsSystemWindows="true" hinzu, weil es erforderlich war, dass der Insets-Listener ausgelöst wurde.
Code: Select all
...
Code: Select all
private fun observeKeyboardChange() {
binding?.clStreamCreatePost?.post {
val view = binding?.clStreamCreatePost ?: return@post
ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets ->
val imeVisible = insets.isVisible(WindowInsetsCompat.Type.ime())
val statusBarHeight = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top
val imeHeight = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom
Toast.makeText(requireContext(), "imeVisible=$imeVisible", Toast.LENGTH_SHORT).show()
// I want clear focus my textfield when keyboard is hidden
if (!imeVisible) v.clearFocus()
v.updatePadding(
top = 0,
bottom = imeHeight
)
insets
}
}
}
[img]https:// i.sstatic.net/A2274mm8m.png[/img]
Hier ist der untere Navigationsbildschirm, bevor die Tastatur sichtbar ist.

Und hier ist das Bild, nachdem die Tastatur sichtbar ist.

Eigentlich, wenn ich das Verhalten beobachte. Das Problem wurde dadurch ausgelöst, dass ich von einer Symbolleiste aus zurückgekehrt bin, als die Tastatur angezeigt wurde, wodurch der Insets-Listener nie aufgerufen wurde.
Wenn ich von der Rückseite aus gedrückt habe, um die Tastatur zuerst zu schließen und dann zurück, wird der Insets-Listener ausgelöst.