Tocar el campo de formulario en WebView no muestra el teclado virtual

He creado mi propio WebView y establecido los objetos WebChromeClient y WebViewClient. Cuando inicie este WebView, los campos de formulario HTML reaccionan cuando los toco (aparece un cursor), pero no se seleccionan, ni se inicia el teclado virtual. Si utilizo el trackball para elegir el formulario y presionarlo, aparece el teclado.

Intenté llamar myWebview.requestFocusFromTouch() como sugirió esta respuesta , pero devuelve false y no ayuda.

http://code.google.com/p/android/issues/detail?id=7189

Aquí hay una solución en caso de que otros no estaban claros.

 webview.requestFocus(View.FOCUS_DOWN); webview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_UP: if (!v.hasFocus()) { v.requestFocus(); } break; } return false; } }); 

Acordado 10% con la respuesta de Dv_MH. Sin embargo, la clase adjunta era un poco excesiva. Todo lo que necesitaba hacer era extender WebView & devolver true para onCheckIsTextEditor ()

 import android.content.Context; import android.util.AttributeSet; import android.webkit.WebView; public class LiveWebView extends WebView { public LiveWebView(Context context) { super(context); } public LiveWebView(Context context, AttributeSet attrs) { super(context, attrs); } public LiveWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onCheckIsTextEditor() { return true; } } 

A partir de ahí, pude usarlo como un WebView normal (incluso en Diálogos).

Alternativamente, con menos código:

 WebView web = new WebView(context) { @Override public boolean onCheckIsTextEditor() { return true; } }; 

IMPORTANTE Pasé horas buscando esto y lo resolví asegurándome de que el diseño de los padres que extienda "ViewGroup" no tenga propiedad

Android: descendantFocusability = "blocksDescendants" que evitan que el diseño de los niños se enfoque

O Añadir android: focusable = "true" a la vista web

La respuesta de AndroidChen no funcionó para mí en absoluto, pero he buscado el enlace proporcionado ( http://code.google.com/p/android/issues/detail?id=7189 ) y encontré la siguiente clase, funciona perfectamente ( Android Froyo en HTC Bravo), no sólo texto, sino también todos los botones, redirecciones, etc, todo funciona perfectamente: D

 class LiveWebView extends WebView { Context mContext; public LiveWebView(Context context, String URL) { super(context); mContext = context; setWebViewClient(URL); } @Override public boolean onCheckIsTextEditor() { return true; } @SuppressLint("SetJavaScriptEnabled") boolean setWebViewClient(String URL) { setScrollBarStyle(SCROLLBARS_INSIDE_OVERLAY); setFocusable(true); setFocusableInTouchMode(true); requestFocus(View.FOCUS_DOWN); WebSettings webSettings = getSettings(); webSettings.setSavePassword(false); webSettings.setSaveFormData(false); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(false); webSettings.setUseWideViewPort(false); setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_UP: if (!v.hasFocus()) { v.requestFocus(); } break; } return false; } }); this.setWebViewClient(new WebViewClient() { ProgressDialog dialog = new ProgressDialog(mContext); @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { loadUrl(url); return true; } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(mContext, "Oh no! " + description, Toast.LENGTH_SHORT).show(); } public void onPageStarted(WebView view, String url, Bitmap favicon) { if (dialog != null) { dialog.setMessage("Loading..."); dialog.setIndeterminate(true); dialog.setCancelable(true); dialog.show(); } } public void onPageFinished(WebView view, String url) { if (dialog != null) { dialog.cancel(); } } }); this.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { // Activities and WebViews measure progress with different scales. // The progress meter will automatically disappear when we reach 100% } @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { result.confirm(); return true; } }); loadUrl(URL); return true; } } 

Y luego para crear una webview dentro de un diálogo, escribí este código

 AlertDialog.Builder alert = new AlertDialog.Builder(M_PaymentOptions.this); alert.setNegativeButton("Back to Payment Options", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) {} }); alert.setTitle("BarclayCard Payment"); LiveWebView liveWevViewObject = new LiveWebView(M_PaymentOptions.this, redirecturl); alert.setView(liveWevViewObject); alert.show(); 
  • El método webview.goBack () no invoca el método shouldOverrideUrlLoading
  • ¿Cómo abrir un nuevo navegador desde WebViewClient?
  • Cómo mostrar una imagen local en la vista web en android
  • Se bloquea el video HTML 5 al ir a pantalla completa
  • Agregar una vista al final de Webview
  • Cómo deshabilitar el efecto de círculo naranja al hacer clic en un enlace, en un WebView
  • Cómo arreglar "Falta un arrastre mientras esperamos la respuesta de WebCore para tocar hacia abajo"
  • PictureListener está obsoleto y obsoleto, ¿hay un reemplazo?
  • ¿Cómo puedo comprobar desde Android WebView si una página es una "página 404 no encontrada"?
  • Android WebView: métodos de la actividad de llamada forma interfaz JavaScript
  • Android WebView + loadUrl con javascript + onPageFinished = lag
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.