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.
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);
}
}
});