Quando si utilizza AutoCompleteTextView
, l'elenco di suggerimenti a discesa viene visualizzato con la tastiera software ancora visibile. Questo ha senso, dato che è spesso molto più efficiente digitare caratteri successivi per restringere la lista.AutoCompleteTextView: Rimuovi la tastiera virtuale nella stampa posteriore invece dei suggerimenti
Ma se l'utente desidera navigare nell'elenco dei suggerimenti, diventa estremamente noioso con la tastiera del software ancora attiva (questo è ancora più un problema quando il dispositivo è in orientamento orizzontale). La navigazione nell'elenco è molto più semplice senza la tastiera che si occupa dello spazio sullo schermo. Sfortunatamente, il comportamento predefinito rimuove l'elenco per primo quando si preme il tasto indietro (anche se nelle versioni software del tasto Indietro viene visualizzata l'immagine che dice 'premendo per nascondere la tastiera').
Ecco un esempio barebone che dimostra di cosa sto parlando:
public class Main2 extends Activity {
private static final String[] items = {
"One",
"Two",
"Three",
"Four",
"Five"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AutoCompleteTextView actv = new AutoCompleteTextView(this);
actv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
actv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
actv.setThreshold(1);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView(actv);
setContentView(ll);
}
}
Oltre al fatto che questo è poco intuitivo (il suggerimento tasto Indietro sta suggerendo che la stampa di nuovo verrà inviato alla tastiera), rende estremamente fastidiosa la navigazione dei suggerimenti AutoCompleteTextView
.
Qual è la almeno modo invadente (per esempio, la cattura la schiena in su onBackPressed()
in ogni attività e di routing di conseguenza non sarebbe sicuramente ideale) a fare la prima stampa di nuovo nascondere la tastiera, e il secondo rimuovere l'elenco suggerimento ?
buona soluzione, ma non sembra funzionare. La chiave è correttamente acquisita e riconosciuta (ad esempio hideSoftInputFromWindow viene attivata) ma la tastiera non scompare. Potrebbe essere in conflitto con qualcosa in "EditText" che mantiene la tastiera morbida in alto mentre la vista è attiva? –
Puoi provare getApplicationWindowToken() invece –
Lo stesso risultato è ancora sfortunatamente –