Schließen/verbergen Sie das Android Soft Keyboard mit Kotlin
Lesezeit: 4 Minuten
Eugen Trifonov
Ich versuche, eine einfache Android-App in Kotlin zu schreiben. Ich habe einen EditText und einen Button in meinem Layout. Nachdem ich in das Bearbeitungsfeld geschrieben und auf den Button geklickt habe, möchte ich die virtuelle Tastatur ausblenden.
Da ist ein beliebte Frage Schließen/verstecken Sie das Android Soft Keyboard, um es in Java zu tun, aber soweit ich verstehe, sollte es eine alternative Version für Kotlin geben. Wie soll ich es machen?
Gunhan
Verwenden Sie die folgenden Hilfsfunktionen in Ihren Aktivitäten, Fragmenten, um die Soft-Tastatur auszublenden.
fun Fragment.hideKeyboard() {
view?.let { activity?.hideKeyboard(it) }
}
fun Activity.hideKeyboard() {
hideKeyboard(currentFocus ?: View(this))
}
fun Context.hideKeyboard(view: View) {
val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}
Update für die neueste Kotlin-Version
Dadurch wird die Tastatur unabhängig von Ihrem Code entweder im Dialogfragment und / oder in der Aktivität usw. geschlossen.
hideKeyboard()
Verwendung in Aktivität/Fragment:
Wo würden Sie diese drei Funktionen live in der Anwendung empfehlen?
– Dan
24. Juli 2018 um 21:18 Uhr
@Dan Ich behalte diese Funktionen in meiner Datei ContextExtensions.kt, aber Sie können sie überall dort aufbewahren, wo Sie es für geeignet halten.
– Gunhan
25. Juli 2018 um 10:45 Uhr
Dies funktionierte perfekt für mich. Das Lustige ist, dass ich diesen Code nur brauchte, als die App auf einem physischen Gerät lief. Auf dem Simulator (AVD) entließ sich die Tastatur wie eine gute Tastatur.
– Dan
26. Juli 2018 um 14:10 Uhr
Wenn ich diese in eine ContextExtensions.kt-Datei stecke, kann ich aus irgendeinem Grund nicht von meinen Fragmenten usw. darauf zugreifen. Gibt es etwas Besonderes, das ich in der ContextExtensions-Klasse einrichten muss, um diese über die App zugänglich zu machen? ?
– svguerin3
15. Mai 2019 um 18:38 Uhr
OMG vielen Dank dafür. Von iOS kommend erscheint es mir lächerlich, dass dies überhaupt ein Problem ist, aber Ihre Lösung ist die sauberste, die ich je gesehen habe. Vielen Dank!
– Ricky Padilla
Benutzer-Avatar
Peter Szucs ViewIch denke, wir können Viktors Antwort ein wenig verbessern. Basierend darauf, dass es immer an a angehängt ist InputMethodManageres wird einen Kontext geben, und wenn es einen Kontext gibt, dann gibt es einen
fun View.hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
}
:
Der Kontext bedeutet in diesem Fall automatisch den Kontext der Ansicht. Was denkst du?
Ich möchte diese Methode in einer Utility-Klasse hinzufügen. Wie rufe ich diese Methode dann von Activity/Fragment/Adapter auf?
– chandani c patel
4. Januar 2018 um 6:44 Uhr editText.hideKeybord() gut verwenden zum Beispiel
editText kann durch jede Ansicht ersetzt werden.
– AndroLife
12. November 2018 um 13:10 Uhr
Gibt es eine Möglichkeit, dies in einer separaten Klasse zu platzieren, damit es in der gesamten App zugänglich ist?
– svguerin3
Benutzer-Avatar
Zeeshan Ayaz
Überschreiben Sie diese Methode einfach in Ihrer Aktivität. Es funktioniert automatisch auch in seinen untergeordneten Fragmenten…..
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
if (currentFocus != null) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
}
return super.dispatchTouchEvent(ev)
}
In Kotlin
fun View.hideKeyboard() {
val inputManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputManager.hideSoftInputFromWindow(windowToken, 0)
}
Erstellen Sie in Ihrer Aktivität oder Ihrem Fragment eine Funktion als: your_button_id Angenommen, Sie haben eine Schaltfläche mit einer ID
in der XML-Datei, die sich auf diese Aktivität oder dieses Fragment bezieht, also beim Klick auf die Schaltfläche:
fun Activity.hideKeyboard() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0);
}
Erstellen Sie eine Objektklasse namens Utils: BaseActivitySie können diese Methode in jeder Klasse verwenden, in der Sie die Soft-Input-Tastatur ausblenden möchten. Ich benutze das in meinem
fun View.hideSoftInput() {
val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}
Ich habe diese Variante der Kotlin-Erweiterungsfunktion nicht gesehen:
Der Vorteil besteht darin, dass diese Erweiterungsfunktion von jeder CustomView und in jedem Click- oder Touch-Listener aufgerufen werden kann
Lief wie am Schnürchen
– Arjun Verma
13106800cookie-checkSchließen/verbergen Sie das Android Soft Keyboard mit Kotlinyes