Ich habe mehr als zwei Tage damit verbracht, alle in diesem Thread geposteten Lösungen durchzuarbeiten und habe festgestellt, dass sie in der einen oder anderen Weise unzureichend sind. Meine genaue Anforderung ist es, eine Schaltfläche zu haben, die mit 100% Zuverlässigkeit die Bildschirmtastatur ein- oder ausblendet. Wenn die Tastatur ausgeblendet ist, sollte sie nicht wieder erscheinen, unabhängig davon, auf welche Eingabefelder der Benutzer klickt. Im sichtbaren Zustand sollte die Tastatur nicht verschwinden, egal auf welche Tasten der Benutzer klickt. Dies muss auf Android 2.2+ bis hin zu den neuesten Geräten funktionieren.
Sie können eine funktionierende Implementierung dieses Verfahrens in meiner Anwendung sehen sauberes RPN .
Nachdem ich viele der vorgeschlagenen Antworten auf einer Reihe verschiedener Telefone (einschließlich Froyo- und Gingerbread-Geräte) getestet hatte, wurde deutlich, dass Android-Apps zuverlässig funktionieren:
- Blenden Sie die Tastatur vorübergehend aus. Sie wird wieder eingeblendet, wenn ein Benutzer ein neues Textfeld fokussiert.
- Anzeigen der Tastatur bei Beginn einer Aktivität und ein Kennzeichen für die Aktivität setzen, das angibt, dass die Tastatur immer sichtbar sein soll. Diese Markierung kann nur gesetzt werden, wenn eine Aktivität initialisiert wird.
- Markieren Sie eine Aktivität, die die Verwendung der Tastatur. Dieses Kennzeichen kann nur gesetzt werden, wenn eine Aktivität initialisiert wird.
Für mich reicht es nicht aus, die Tastatur vorübergehend auszublenden. Auf einigen Geräten wird sie wieder angezeigt, sobald ein neues Textfeld fokussiert wird. Da meine Anwendung mehrere Textfelder auf einer Seite verwendet, führt das Fokussieren eines neuen Textfeldes dazu, dass die ausgeblendete Tastatur wieder auftaucht.
Leider funktionieren die Punkte 2 und 3 der Liste nur zuverlässig, wenn eine Aktivität gestartet wird. Wenn die Aktivität erst einmal sichtbar geworden ist, können Sie die Tastatur nicht dauerhaft ein- oder ausblenden. Der Trick besteht darin, die Aktivität tatsächlich neu zu starten, wenn der Benutzer die Schaltfläche zum Umschalten der Tastatur drückt. In meiner Anwendung wird der folgende Code ausgeführt, wenn der Benutzer auf die Schaltfläche zum Umschalten der Tastatur drückt:
private void toggleKeyboard(){
if(keypadPager.getVisibility() == View.VISIBLE){
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Bundle state = new Bundle();
onSaveInstanceState(state);
state.putBoolean(SHOW_KEYBOARD, true);
i.putExtras(state);
startActivity(i);
}
else{
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Bundle state = new Bundle();
onSaveInstanceState(state);
state.putBoolean(SHOW_KEYBOARD, false);
i.putExtras(state);
startActivity(i);
}
}
Dies bewirkt, dass der Zustand der aktuellen Aktivität in einem Bundle gespeichert wird, und dann wird die Aktivität gestartet, wobei ein boolescher Wert übergeben wird, der angibt, ob die Tastatur angezeigt oder ausgeblendet werden soll.
Innerhalb der onCreate-Methode wird der folgende Code ausgeführt:
if(bundle.getBoolean(SHOW_KEYBOARD)){
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(newEquationText,0);
getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
else{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}
Wenn die Soft-Tastatur angezeigt werden soll, dann wird der InputMethodManager angewiesen, die Tastatur anzuzeigen, und das Fenster wird angewiesen, die Soft-Eingabe immer sichtbar zu machen. Wenn die Soft-Tastatur ausgeblendet werden soll, wird das WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM gesetzt.
Dieser Ansatz funktioniert zuverlässig auf allen Geräten, die ich getestet habe - von einem 4 Jahre alten HTC-Handy mit Android 2.2 bis zu einem Nexus 7 mit 4.2.2. Der einzige Nachteil bei diesem Ansatz ist, dass man vorsichtig mit der Zurück-Taste umgehen muss. Da meine App im Wesentlichen nur einen Bildschirm hat (es ist ein Taschenrechner) kann ich onBackPressed() überschreiben und zum Home-Bildschirm des Geräts zurückkehren.
19 Stimmen
Was ist, wenn Sie nur einen EditText und mehrere Schaltflächen, wie Kontrollkästchen und Radios, haben? Der einzige Ort, an dem Sie die Tastatur benötigen, ist der einzelne EditText. Wie registrieren Sie, dass etwas anderes gewählt/angeklickt wurde, um die Tastatur auszublenden?
19 Stimmen
Ich komme mir dumm vor. Ich bin nicht in der Lage, die Tastatur auf ICS zu verstecken. Habe alle Methoden hier und Kombinationen von ihnen versucht. Keine Chance. Die Methode, um es zu zeigen, funktioniert, aber ich kann es nicht verstecken, egal, was windw Token, verstecken Flaggen, manifestieren Einstellungen oder Kerzen zu jedem Heiligen. Auf der Tastatur zeigen, sehe ich immer diese: I/LatinIME( 396): InputType.TYPE_NULL ist angegeben W/LatinIME( 396): Unerwartete Eingabeklasse: inputType=0x00000000 imeOptions=0x00000000
5 Stimmen
/** * Diese Methode wird verwendet, um die Soft-Tastatur auszublenden. * @param activity */ public void hideSoftKeyboard(Activity activity) { InputMethodManager inputMethodManager = (InputMethodManager)activity.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); }
0 Stimmen
este hat bei mir funktioniert
0 Stimmen
Da die Geräte immer größere Bildschirme und höhere Auflösungen haben, wird das Ausblenden der virtuellen Tastatur immer unwichtiger.
0 Stimmen
Müssen mit InputMethodManager mit dem INPUT_METHOD_SERVICE zu spielen, um Soft-Tastatur wie behandeln readyandroid.wordpress.com/show-hide-Android-soft-keyboard
0 Stimmen
Ist das Ihr Ernst? Kann man die Tastatur nicht einfach ausblenden, wenn man das möchte? Es spielt keine Rolle, ob Sie viele Tasten oder Text oder einen großen Bildschirm haben, um Android zu bitten, die Tastatur auszublenden, muss eine einzige Anweisung sein :S