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 View
attività e verificare se è un instanceof EditText
se non è registrato setOnTouchListener
a 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 setContentView
nella tua attività. Nel caso ti stia chiedendo quale parametro passeresti, è il id
contenitore principale. Assegna un tipo id
al 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 Activity
metodo 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 Activity
e 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)
}
}