Pregunta

Yo quería un teclado numérico que tenía un botón hecho de que cierra y ejecuta una clase de cálculo ir o. Gracias a un consejo de commonware de por dónde empezar Tengo esta trabajando muy bien en el emulador. Entonces llegué a cargarlo en mi HTC deseo de probar y no funciona en absoluto. Estoy seguro de que debe ser porque de sentido HTC tener su propio IME, pero seguramente debe haber una manera de hacer este trabajo en los teléfonos HTC? Nadie más consiguió evitar este problema?

¿Fue útil?

Solución

Me puede replicar lo que creo que está viendo en el HTC Incredible.

No todos los teclados virtuales apoyarán el botón de acción IME. Algunos, como el Graffiti suave "teclado", puede tener ningún botón en absoluto, y mucho menos un botón de acción IME. Incluso el Compatibilidad de definición de documento dice nada acerca de que requiere un botón de dicha acción de los teclados suministrados con una dispositivo.

Por lo tanto, usted no debe confiar en el botón de acción IME. Si está allí, los usuarios pueden utilizar la misma. Sin embargo, siempre tienen algún otro medio de llevar a cabo lo que su objetivo es.

Otros consejos

Soy detectar si el botón DONE / GO / RETURN se ha pulsado el uso de un onEditorActionListener, pero la comprobación de opciones IME y KeyEvents a los teclados cubierta de HTC, así como los teclados que aceptan opciones IME.

(Este código funciona para HTC Incredible teclados, así cualquier teclado que tiene opciones IME)

EditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){
    public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event){
        if(actionId == EditorInfo.IME_ACTION_DONE 
            || actionId == EditorInfo.IME_NULL
            || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

            //Do something in here
            return true;
        } else {
            return false;
        }
    }
});

I estaba usando un EditarTexto con inputType = "número" y resuelto el problema mediante la modificación de la solución de Asha:

private TextView.OnEditorActionListener numberEnterListener = new TextView.OnEditorActionListener(){
        public boolean onEditorAction(TextView tv, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE 
                || actionId == EditorInfo.IME_NULL
                || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

                tv.clearFocus();

                //Stupid keyboard needs to be closed as well
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(tv.getWindowToken(), 0);

                return true;
            } else {
                return false;
            }
        }
    };

El enfoque se eliminó con el fin de dejar de mostrar el teclado numérico. Se requirió que el imm porque un teclado blando todavía estaba presente incluso después de foco claro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top