teclado tactil precio para online one juegos celular android keyboard android-softkeyboard android-input-method kiosk-mode

android - tactil - Mostrar el teclado virtual aunque haya un teclado de hardware conectado



teclado virtual online (4)

De acuerdo con este https://stackoverflow.com/a/24287780/2233069 , hice una solución de trabajo para el modo Kiosk.

boolean hardwareKeyboardPlugged=false; .... mEditText.setOnFocusChangeListener(this);//in onCreate() .... @Override public void onResume() { //protect from barcode scanner overriding keys hardwareKeyboardPlugged=(getResources().getConfiguration().hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO); super.onResume(); } .... @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) if (hardwareKeyboardPlugged){ //protect from barcode scanner overriding keys hardwareKeyboardPlugged=false; ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showInputMethodPicker(); Toast.makeText(this, "USB device detected. Turn OFF hardware keyboard to enable soft keyboard!", Toast.LENGTH_LONG).show(); } }

¿Hay alguna forma de mostrar el teclado del software con el teclado USB conectado (en mi caso, el lector RFID)?
Intenté forzar que se muestre utilizando InputManager (con estos u otros parámetros similares), pero sin suerte

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

Aviso importante : sé que hay un botón en la barra de estado / sistema para mostrarlo, pero este botón no es visible para el usuario (aplicación Kiosk).


Debe anular el método InputMethodService onEvaluateInputViewShown () para evaluar a verdadero incluso cuando hay un teclado duro. Consulte onEvaluateInputShown() y la sección Vista de entrada suave de InputMethodService . Intente crear su propia clase personalizada InputMethodService para anular este método.

EDITAR: La fuente para onEvaluateInputShown () debería ayudar. La solución debe ser tan simple como crear su propia clase que amplíe InputMethodService y anule este único método, que solo tiene un par de líneas. Asegúrese de agregar su servicio personalizado a su manifiesto también.

De Fuente:

"Anule esto para controlar cuándo se debe mostrar el área de entrada suave al usuario. La implementación predeterminada solo muestra la vista de entrada cuando no hay un teclado físico o el teclado está oculto. Si cambia lo que esto devuelve, deberá llamar a updateInputViewShown () usted mismo cuando el valor devuelto pueda haber cambiado para que se vuelva a evaluar y se aplique. "

public boolean onEvaluateInputViewShown() { Configuration config = getResources().getConfiguration(); return config.keyboard == Configuration.KEYBOARD_NOKEYS || config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES; }

Here están las posibles configuraciones que puede verificar. Configuration.KEYBOARD_NOKEYS no corresponde a ningún teclado de hardware. Este método devuelve verdadero (se debe mostrar el teclado virtual) si no hay un teclado de hardware o si el teclado de hardware está oculto. Si se eliminan ambas comprobaciones y se devuelve verdadero, el teclado del software debe estar visible incluso si hay un teclado de hardware conectado.

Probar (no probado):

public boolean onEvaluateInputViewShown() { return true; }

Dado que este valor de retorno no cambiará, no necesitará llamar a updateInputViewShown () usted mismo. Si modifica este método de manera diferente, asegúrese de recordar este detalle.


El teclado suave puede tener un comportamiento impredecible en diferentes plataformas. Primero en su código, asegúrese de tener un control de entrada editable. Por ejemplo, si tiene un EditText, puede usar:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)) .showSoftInput(myEditText, InputMethodManager.SHOW_FORCED);

Sin embargo, puedes mostrarlo y ocultarlo cuando quieras con:

//show keyboard: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); //hide keyboard : getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

También puede agregar cualquiera de estos eventos dentro de OnCreate o algún otro método de los controles.

Sin embargo, si por alguna razón falla alguno de los anteriores, su mejor opción podría ser usar un teclado alternativo, por ejemplo, Compass Keyboard ,

O

Incluso podrías construir el tuyo:

Vea un ejemplo de un teclado que implementa el inputmethodservice.KeyboardView

También es posible que desee echar un vistazo a la fuente del teclado GingerBread.


Esto funcionó en mi aplicación, curiosamente, también una aplicación de kiosco.

Esto es un poco despojado, hice algunas comprobaciones de antemano, si IMM es nulo y tal.

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInputFromWindow(someInputView.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);