teclado sacar poner pantalla mostrar interno flotante encuentro donde como atajo android

android - sacar - ¿Cómo puedo mostrar el teclado virtual en una vista web con un dispositivo USB HID conectado cuando se hace clic en un botón y se enfoca una entrada?



teclado interno windows 7 (4)

No puedo probarlo ahora, pero simplemente puedes usar la interfaz javascript para llamar a esto:

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); imeManager.showInputMethodPicker();

Esto DEBE abrir el diálogo con los teclados actuales (dispositivo de entrada). Dado que el escáner bluetooth reemplaza el teclado actual, no estoy seguro de que pueda mostrar el teclado.

Con el mismo método, el usuario volverá al escáner si es necesario.

Lo intentaré cuando vuelva a casa, dentro de 6 o 7 horas a partir de ahora, pero siéntase libre de probarlo usted mismo;)

Tengo un escáner de código de barras USB que está conectado al dispositivo con USB OTG. Debido a que esto se detecta como un dispositivo HID de teclado, el teclado virtual se desactiva cuando las entradas están enfocadas.

Actualmente tengo un método que activa el teclado desde JavaScript.

class JsObject { @JavascriptInterface public void InvokeKeyboard() { InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.showSoftInput(findViewById(R.id.webView), InputMethodManager.SHOW_FORCED); } } webview.addJavascriptInterface(new JsObject(), "Android");

Básicamente quiero que abra el teclado en la siguiente acción dentro de la vista web.

const button = document.querySelector(''.fire-keyboard''); button.addEventListener(''click'', () => Android.InvokeKeyboard());

Funciona cuando se le llama desde la vista web manualmente, pero quiero poder hacer clic en un botón que lo active, y al hacer clic en el botón se pierde el foco del cuadro de entrada.

Solo para agregar, no quiero que el teclado se muestre al enfocar un cuadro de entrada, solo que se muestre cuando se hace clic en un botón para activarlo. Por defecto se muestra en el foco.


Puede ser debido al dispositivo que está utilizando. Hice una muestra según su escenario y la Nexus5 con éxito en el dispositivo Nexus5 que estoy usando.

Simplemente use document.getElementById("mytextfield").focus(); en código JS que hizo el truco.

Código HTML de muestra

<!DOCTYPE html> <html> <head> </head> <body> <form name="myform"> <input type="text" id="mytextfield"> </form> <input type="button" value="Click Me!" onClick="executeAndroidCode()" /> <script type="text/javascript"> function executeAndroidCode() { Android.execAndroid(); document.getElementById("mytextfield").focus(); //this line did the trick after click on button } </script> </body> </html>

Guarde este archivo en el activo llamado index.html

Interfaz de JavaScript

public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } @JavascriptInterface public void execAndroid() { InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.showSoftInput(findViewById(R.id.webView1), InputMethodManager.SHOW_FORCED); } }

código onCreate

WebView wv = (WebView) findViewById(R.id.webView1); wv.addJavascriptInterface(new WebAppInterface(this), "Android"); WebSettings webSettings = wv.getSettings(); webSettings.setJavaScriptEnabled(true); wv.loadUrl("file:///android_asset/index.html");

Su trabajo bien en mi lado estoy usando Nexus5 . Aunque el cursor no aparece en la captura de pantalla, está parpadeando cuando ejecuto la aplicación.


Resulta que solo necesitaba que este hardware se activara.


Try this inputBox.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus) { getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0); } } });