samsung - teclado virtual android para juegos
AutoCompleteTextView: elimine el teclado virtual al presionar hacia atrĂ¡s en lugar de sugerencias (2)
establece DismissClickListener
como este
autoCompleteTextView.setOnDismissListener(new AutoCompleteTextView.OnDismissListener() {
@Override
public void onDismiss() {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), 0);
}
});
Al utilizar AutoCompleteTextView
, la lista de sugerencias desplegable aparece con el teclado del software aún visible. Esto tiene sentido, ya que a menudo es mucho más eficiente escribir caracteres subsiguientes para restringir la lista.
Pero si el usuario desea navegar por la lista de sugerencias, se vuelve extremadamente tedioso con el teclado del software todavía activo (esto es aún más un problema cuando el dispositivo está en orientación horizontal). Navegar por la lista es mucho más fácil sin que el teclado acapare el espacio de la pantalla. Desafortunadamente, el comportamiento predeterminado elimina primero la lista cuando presiona la tecla Atrás (aunque en las versiones de software de la tecla Atrás está mostrando la imagen que dice ''presionar esto ocultará el teclado'').
Aquí hay un ejemplo de barebones que demuestra de lo que estoy hablando:
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);
}
}
Además del hecho de que esto no es intuitivo (la sugerencia de la tecla de retroceso sugiere que la retroimpresión se enviará al teclado), hace que navegar por las sugerencias de AutoCompleteTextView
extremadamente tedioso.
¿Cuál es la forma menos intrusiva (por ejemplo, capturar la parte posterior de onBackPressed()
en cada actividad y onBackPressed()
en consecuencia no sería ideal) para hacer que la primera retroceso oculte el teclado, y la segunda eliminar la lista de sugerencias?
Puede lograrlo anulando onKeyPreIme en su AutoCompleteTextView personalizado.
public class CustomAutoCompleteTextView extends AutoCompleteTextView {
public CustomAutoCompleteTextView(Context context) {
super(context);
}
public CustomAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && isPopupShowing()) {
InputMethodManager inputManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputManager.hideSoftInputFromWindow(findFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS)){
return true;
}
}
return super.onKeyPreIme(keyCode, event);
}
}