In Android, siamo abituati a vedere apparire una tastiera software all’atto di assegnare il focus ad una EditText per permetterci di digitare caratteri. Ciò avviene in automatico ma può essere utile saper esplicitamente invocare la sua apertura o chiusura: per questo, vediamo come funziona l’InputMethodManager
Qualora volessimo chiudere la tastiera software potremmo utilizzare le seguenti righe di codice:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(findViewById(R.id.activity_main).getWindowToken(), 0);
Con la prima riga, richiediamo il collegamento all’InputMethodManager che consiste in un servizio di sistema, con la seconda richiediamo esplicitamente di nascondere la tastiera. Si noti che il metodo hideSoftInputFromWindow riceve due parametri in input:
- un WindowToken che consiste in un identificativo univoco alla finestra. Per ottenerlo è sufficiente richiederlo ad una View ad essa collegata. Qui abbiamo supposto di avere un layout con id R.id.activity_main ma, come si può immaginare, l’oggetto View su cui eseguire l’invocazione dovrà essere scelto in base al proprio progetto;
- il secondo è un campo per un flag che può valere 0 o essere impostato al valore HIDE_IMPLICIT_ONLY che specifica che la tastiera andrebbe chiusa solo se non esplicitamente invocata dall’utente.
Esiste comunque un metodo per gestire apertura e chiusura della tastiera software, toggleSoftInputFromWindow, da usare nel modo seguente:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInputFromWindow(
findViewById(R.id.activity_main).getApplicationWindowToken(),
InputMethodManager.SHOW_FORCED, 0);
Anche qui il primo parametro del metodo toggleSoftInputFromWindow è un WindowToken mentre successivamente possiamo ospitare due flag: uno per quanto riguarda l’apertura, uno per la chiusura. Come flag di apertura, si può usare 0 o i valori SHOW_IMPLICIT (l’azione non è esplicita richiesta dell’utente) e SHOW_FORCED (la tastiera non deve essere richiusa senza esplicita richiesta dell’utente). Per la chiusura, i flag possibili sono HIDE_IMPLICIT_ONLY (come sopra) e HIDE_NOT_ALWAYS (dovrebbe normalmente essere chiusa a meno che non aperta con SHOW_FORCED) oltre al valore neutro 0.
Impostando, ad esempio, entrambi i flag a 0, il metodo toggleSoftInputFromWindow implementerebbe una sorta di interruttore per la tastiera permettendo di aprirla e chiuderla a comando. Qualora utilizzassimo invece SHOW_FORCED per l’apertura e HIDE_NOT_ALWAYS per la chiusura la tastiera verrebbe aperta con il metodo toggleSoftInputFromWindow ma potrebbe solo essere richiusa su richiesta esplicita dell’utente.
Vi è mai capitato di sentire il bisogno di gestire direttamente la tastiera ? Provate questi metodi e fateci sapere cosa ne pensate!











One Response to “Android: gestire la tastiera software mediante InputMethodManager”
3 Aprile 2020
MassimilianoCome è dove si modifica il tutto ?