Il frammento seguente nasconde semplicemente la tastiera:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Puoi inserirlo in una classe di utilità o, se lo stai definendo all'interno di un'attività, evita il parametro di attività o chiama hideSoftKeyboard(this).
La parte più difficile è quando chiamarlo. È possibile scrivere un metodo che scorre in ogni Viewattività e verificare se è un instanceof EditTextse non è registrato setOnTouchListenera quel componente e tutto andrà a posto. Nel caso ti stia chiedendo come farlo, in realtà è abbastanza semplice. Ecco cosa fai, scrivi un metodo ricorsivo come il seguente, infatti puoi usarlo per fare qualsiasi cosa, come impostare caratteri personalizzati ecc ... Ecco il metodo
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);
}
}
}
Questo è tutto, basta chiamare questo metodo dopo di te setContentViewnella tua attività. Nel caso ti stia chiedendo quale parametro passeresti, è il idcontenitore principale. Assegna un tipo idal tuo contenitore genitore
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
e chiama setupUI(findViewById(R.id.parent)), tutto qui.
Se si desidera utilizzarlo in modo efficace, è possibile creare un Activitymetodo esteso e inserire questo metodo e fare in modo che tutte le altre attività nell'applicazione estendano tale attività e la chiamino setupUI()nel onCreate()metodo.
Spero che sia d'aiuto.
Se si utilizza più di 1 attività, definire un ID comune come layout padre
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Quindi estendi una classe da Activitye definisci setupUI(findViewById(R.id.main_parent))All'interno di essa OnResume()ed estendi questa classe invece di `` Attivitàin your program
Ecco una versione di Kotlin della funzione sopra:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}