2011-01-02 31 views
15

Estoy creando un juego de mecanografía simple en Android. No tengo problemas para obtener información del teclado físico, pero ahora estoy intentando que aparezca el teclado virtual sin EditText. Hasta ahora, he intentado lo siguiente:¿Puedo usar el teclado virtual sin EditText?

1. EditarTexto con una visibilidad = "invisible" y esta línea:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(keyboard_edittext, InputMethodManager.SHOW_FORCED); // SHOW_IMPLICIT also failed 

2. esta línea en el onCreate():

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

Este método realmente muestra un cuadro blanco vacío en el 10% inferior de la pantalla pero no en el teclado, aunque cuando lo ejecuto ahora no hace nada.

3. Otros dos líneas en el onCreate():

InputMethodManager m = (InputMethodManager)this.getSystemService (Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 

Sin suerte en cualquiera de estos. ¿Es posible mostrar el teclado virtual (y luego usar onKeyUp/onKeyDown) sin enfocar un EditText?

En este momento, la única forma en que puedo ver es acercarme a esto es crear mi propia implementación del teclado virtual (es decir, compilarlo desde cero). ¡No estoy esperando eso!

+0

Incluso si logra mostrar el teclado virtual, onKeyUp()/Down() no recibirán llamadas, al menos no para todas las teclas y en todas las versiones de Android. En algunas versiones de Android (más antiguas) (creo que 1.5 y quizás 1.6) onKeyDown() se llama con teclas numéricas, pero no con letras. Sin embargo, en general, usar onKeyDown() para recibir la entrada de teclado no lo conducirá a los resultados deseados, esto solo funcionará correctamente con los teclados duros. – ubuntudroid

Respuesta

2

Puede forzar la Softkeyboard para ser mostrado usando:

 

InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED); 
 
+0

No va a cambiar a SHOW_FORCED.También intenté requestFocus(); en el texto de edición, pero eso tampoco funcionó. – ang

+0

no funciona! (Android 4.2) –

4

El siguiente código funciona para mí:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

utilizo este código en un controlador onKeyUp cuando pulso el menú" "botón.

+1

no funciona! (android 4.2) –

+0

Todavía funciona para mí. Y en Android 4.4 también. – miha

+1

¿Hay alguna manera de forzar un cierto tipo de entrada en ese caso? como solo dígitos ... en lugar de usar 'setRawInputType' –

2

Asegúrese de habilitar el teclado en pantalla para la vista:

setFocusable(true); 
setFocusableInTouchMode(true); 

luego llamar a:

InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT); 
+0

¡no funciona! (android 4.2) –

3

En lugar de utilizar visibility="invisible" puede establecer android:alpha="0" en su EditarTexto. Por lo que aún necesitan un EditarTexto pero no es visible y se puede obtener la entrada desde el softkeyboard por un onKeyListener()

0

Tenga en cuenta que si está trabajando en modo horizontal, la entrada de software creará su propio campo de entrada de texto arruinar toda tu duro trabajo. Puede evitar este comportamiento:

// This makes us remain invisible when in landscape mode. 
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Ahora, si ha configurado un EditText invisible, permanecerá tal como lo hizo.

Cuestiones relacionadas