Das folgende Snippet verbirgt einfach die Tastatur:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Sie können dies in einer Dienstprogrammklasse ablegen oder, wenn Sie es innerhalb einer Aktivität definieren, den Aktivitätsparameter vermeiden oder aufrufen hideSoftKeyboard(this)
.
Der schwierigste Teil ist, wann man es nennt. Sie können eine Methode schreiben, die alle View
in Ihrer Aktivität durchläuft , und prüfen, ob es sich um eine Methode handelt, die instanceof EditText
nicht setOnTouchListener
für diese Komponente registriert ist , und alles passt zusammen. Falls Sie sich fragen, wie das geht, ist es in der Tat ganz einfach. Hier ist, was Sie tun, Sie schreiben eine rekursive Methode wie die folgende, in der Tat können Sie diese verwenden, um alles zu tun, wie benutzerdefinierte Schriften einzurichten 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 nach Ihnen setContentView
in Ihrer Aktivität auf. Wenn Sie sich fragen, welchen Parameter Sie übergeben würden, handelt es sich id
um den übergeordneten Container. Weisen Sie id
Ihrem übergeordneten Container einen zu
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
und ruf an setupUI(findViewById(R.id.parent))
, das ist alles.
Wenn Sie dies effektiv nutzen möchten, können Sie eine erweiterte Activity
Methode erstellen und diese Methode einfügen. Alle anderen Aktivitäten in Ihrer Anwendung können diese Aktivität erweitern und setupUI()
in der onCreate()
Methode aufrufen .
Ich hoffe es hilft.
Wenn Sie mehr als eine Aktivität verwenden, definieren Sie die allgemeine ID für das übergeordnete Layout wie
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Erweitern Sie dann eine Klasse aus Activity
und definieren Sie setupUI(findViewById(R.id.main_parent))
Innerhalb ihrer OnResume()
und erweitern Sie diese Klasse anstelle von `` Activityin 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)
}
}