Das folgende Snippet blendet einfach die Tastatur aus:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
if(inputMethodManager.isAcceptingText()){
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(),
0
);
}
}
Sie können dies in einer Hilfsklasse unterbringen, oder wenn Sie es innerhalb einer Aktivität definieren, vermeiden Sie den Aktivitätsparameter, oder rufen Sie hideSoftKeyboard(this)
.
Das Schwierigste ist die Frage, wann man ihn anruft. Sie können eine Methode schreiben, die durch alle View
in Ihrer Aktivität, und prüfen Sie, ob es sich um eine instanceof EditText
wenn es sich nicht um die Registrierung eines setOnTouchListener
zu dieser Komponente und alles wird sich fügen. Falls Sie sich fragen, wie man das macht, es ist eigentlich ganz einfach. Sie schreiben eine rekursive Methode wie die folgende, die Sie für alles Mögliche verwenden können, z. B. für die Einrichtung benutzerdefinierter Schriftarten usw... Hier ist die Methode
public void setupUI(View view) {
// Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(MyActivity.this);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
Das ist alles. Rufen Sie diese Methode einfach auf, nachdem Sie setContentView
in Ihrer Tätigkeit. Falls Sie sich fragen, welchen Parameter Sie übergeben würden, es ist der id
des übergeordneten Containers. Zuweisen einer id
zu Ihrem übergeordneten Container wie
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
und rufen setupUI(findViewById(R.id.parent))
das ist alles.
Wenn Sie dies effektiv nutzen wollen, können Sie eine erweiterte Activity
und fügen Sie diese Methode ein, und lassen Sie alle anderen Aktivitäten in Ihrer Anwendung diese Aktivität erweitern und ihre setupUI()
において onCreate()
Methode.
Ich hoffe, es hilft.
Wenn Sie mehr als 1 Aktivität verwenden, definieren Sie eine gemeinsame ID für das übergeordnete Layout wie <RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Erweitern Sie dann eine Klasse von Activity
und definieren setupUI(findViewById(R.id.main_parent))
Innerhalb seiner OnResume()
und erweitern Sie diese Klasse anstelle von ``Activity in your program
Hier ist eine Kotlin-Version der obigen Funktion:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}
0 Stimmen
Mir wurde klar, dass nicht die Bildlaufleiste das Problem war, sondern die dort vorhandenen Etiketten. Die Ansicht ist ein vertikales Layout mit etwas wie: TextView, EditText,TextView,EditText, etc.. und die TextViews lassen nicht zu, dass der EditText den Fokus verliert und die Tastatur ausblendet
0 Stimmen
Sie können eine Lösung finden für
getFields()
hier: stackoverflow.com/questions/7790487/0 Stimmen
Die Tastatur kann durch Drücken der Eingabetaste geschlossen werden, daher ist es fraglich, ob sich der Aufwand lohnt.
5 Stimmen
Ich habe diese Antwort gefunden: stackoverflow.com/a/28939113/2610855 Der beste.