Ich muss etwas ganz Einfaches tun - herausfinden, ob die Software-Tastatur angezeigt wird. Ist dies in Android möglich?
Ich habe ein Problem, es sagt: "Unresolved Referenz isVisible()", bitte helfen
Ich muss etwas ganz Einfaches tun - herausfinden, ob die Software-Tastatur angezeigt wird. Ist dies in Android möglich?
Wow, wir haben gute Nachrichten Android Geeks. Und es ist Zeit, sich von der alten Methode zu verabschieden. Zuerst werde ich hinzufügen offizielle Freigabemitteilung zu lesen und mehr über diese Methoden/Klassen zu erfahren, und dann werden wir sehen diese erstaunlichen Methoden / Klassen
Breaking Note: Fügen Sie diese nicht in Ihre Anwendungen ein, bis diese Klassen/Methoden freigegeben sind.
So überprüfen Sie die Sichtbarkeit der Tastatur
val insets = ViewCompat.getRootWindowInsets(view)
val isKeyboardVisible = insets.isVisible(Type.ime())
Wenige andere Dienstprogramme
Wie man die Höhe der Tastatur ermittelt
val insets = ViewCompat.getRootWindowInsets(view)
val keyboardHeight = insets.getInsets(Type.ime()).bottom
Einblenden/Ausblenden der Tastatur
val controller = view.windowInsetsController
// Show the keyboard
controller.show(Type.ime())
// Hide the keyboard
controller.hide(Type.ime())
Nota: WindowInsetsController in API-30 hinzugefügt, also warten, bis abwärtskompatible Klasse nicht verfügbar ist.
Wie man auf das Ereignis "Tastatur ausblenden/anzeigen" hört
ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets ->
val isKeyboardVisible = insets.isVisible(Type.ime())
if (isKeyboardVisible) {
// Do it when keyboard is being shown
} else {
// Do it when keyboard is hidden
}
// Return the insets to keep going down this event to the view hierarchy
insets
}
Wenn Sie Ihre Tastatur ausblenden und gleichzeitig den Status der Softeingabe überprüfen müssen, sollten Sie die folgende Lösung verwenden:
public boolean hideSoftInput() {
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
return imm.hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);
}
Diese Methode gibt true zurück, wenn die Tastatur vor dem Ausblenden angezeigt wurde.
Dies sollte die akzeptierte Antwort sein. All diese Schreiberlinge... smh. Die API sagt nicht, was der Boolesche Wert ist, ist dies also eine sichere Methode?
Ich habe ein wenig Zeit gebraucht, um das herauszufinden... Ich lief es einige CastExceptions, aber herausgefunden, dass Sie Sie LinearLayout in der layout.xml mit dem Namen der Klasse ersetzen können.
Zum Beispiel so:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/llMaster">
<com.ourshoppingnote.RelativeLayoutThatDetectsSoftKeyboard android:background="@drawable/metal_background"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:id="@+id/rlMaster" >
<LinearLayout android:layout_width="fill_parent"
android:layout_height="1dip" android:background="@drawable/line"></LinearLayout>
....
</com.ourshoppingnote.RelativeLayoutThatDetectsSoftKeyboard>
</LinearLayout>
Auf diese Weise werden Sie keine Probleme mit dem Guss haben.
... und wenn Sie das nicht auf jeder Seite machen wollen, empfehle ich Ihnen, "MasterPage in Android" zu verwenden. Siehe den Link hier: http://jnastase.alner.net/archive/2011/01/08/ldquomaster-pagesrdquo-in-Android.aspx
Seien Sie vorsichtig beim Einfügen in Ihr XML, wenn Sie nicht denselben Paket-/Klassennamen haben. Eclipse friert einfach ein und man muss es herunterfahren. So ein professionelles Produkt. /s
Die Überprüfung der Höhe der Elemente ist nicht zuverlässig, da einige Tastaturen wie WifiKeyboard keine Höhe haben.
Stattdessen können Sie das Callback-Ergebnis von showSoftInput() und hideSoftInput() verwenden, um den Status der Tastatur zu überprüfen. Vollständige Details und Beispielcode unter
https://rogerkeays.com/how-to-check-if-the-software-keyboard-is-shown-in-Android
Es gibt eine versteckte Methode, die dabei helfen kann, InputMethodManager.getInputMethodWindowVisibleHeight
. Aber ich weiß nicht, warum es versteckt ist.
import android.content.Context
import android.os.Handler
import android.view.inputmethod.InputMethodManager
class SoftKeyboardStateWatcher(private val ctx: Context) {
companion object {
private const val DELAY = 10L
}
private val handler = Handler()
private var isSoftKeyboardOpened: Boolean = false
private val height: Int
get() {
val imm = ctx.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
val method = imm.javaClass.getMethod("getInputMethodWindowVisibleHeight")
method.isAccessible = true
return method.invoke(imm) as Int
}
private val task: Runnable by lazy {
Runnable {
start()
if (!isSoftKeyboardOpened && height > 0) {
isSoftKeyboardOpened = true
notifyOnSoftKeyboardOpened(height)
} else if (isSoftKeyboardOpened && height == 0) {
isSoftKeyboardOpened = false
notifyOnSoftKeyboardClosed()
}
}
}
var listener: SoftKeyboardStateListener? = null
interface SoftKeyboardStateListener {
fun onSoftKeyboardOpened(keyboardHeightInPx: Int)
fun onSoftKeyboardClosed()
}
fun start() {
handler.postDelayed(task, DELAY)
}
fun stop() {
handler.postDelayed({
if (!isSoftKeyboardOpened) handler.removeCallbacks(task)
}, DELAY * 10)
}
private fun notifyOnSoftKeyboardOpened(keyboardHeightInPx: Int) {
listener?.onSoftKeyboardOpened(keyboardHeightInPx)
}
private fun notifyOnSoftKeyboardClosed() {
listener?.onSoftKeyboardClosed()
}
}
Wenn jemand dies benötigen würde - es funktioniert in Xamarin als auch, Name der Methode ist genau das gleiche und muss auf die gleiche Weise zugegriffen werden - durch die Class-Eigenschaft auf die InputMethodManager.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
9 Stimmen
Obwohl die Antwort von Reuben Scratton gut ist, scheint sie auf einem Tablet nicht zu funktionieren. Ich habe die Prüfung diff>128 durch diff>screenHeight/3 ersetzt.
2 Stimmen
Die Antwort von Reuben Scratton war gut, aber ich brauchte die Anpassung von KaChi, um sie wirklich nutzen zu können.
0 Stimmen
Anstatt nur den Höhenunterschied zu prüfen, können wir Folgendes tun
View v = this.getCurrentFocus();if (diff>100 && v != null){ // Its keyboard } else { //Keyboard hidden }
0 Stimmen
Sie können diese Methode ausprobieren, sie hat bei mir gut funktioniert. stackoverflow.com/questions/4745988/
0 Stimmen
@ChristopherHackl danke, das funktioniert bei mir
0 Stimmen
2018 immer noch darüber wüten
0 Stimmen
Ich habe einen Weg gefunden, dies zu tun: stackoverflow.com/questions/4745988/ (cc @FloWe)
2 Stimmen
Warum macht Google nicht eine Standardmethode, die für alle Tastatur-Apps funktioniert?
0 Stimmen
Für diejenigen, die nach einer Antwort suchen, gibt es eine saubere Lösung: stackoverflow.com/a/54761109/5730321
5 Stimmen
Es bricht mir immer noch das Herz, dass dies kein System ist, das funktioniert...
1 Stimmen
Es ist völlig verrückt, dass diese API immer noch nicht vorhanden ist. 10 Jahre später . Ich bin sehr froh, dass ich von Android weggegangen bin.
0 Stimmen
Dort finden Sie die Antwort stackoverflow.com/questions/25216749/