WebView textarea no aparece el teclado

Cuando WebView un WebView , no veo el teclado suave apareciendo. El teclado duro también no funciona!

¿Cuáles son las deficiencias habituales.

El código que utilizo para acceder al WebView es:

 package com.example.blahblah; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; import android.util.Log; import android.view.KeyEvent; import android.view.Window; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class createAccount extends Activity { private static final String LOG_TAG = "Create Account"; private WebView mWebView; private static final String URL = blah_app.urlSelected+"createAccount.html"; private Handler mHandler = new Handler(); @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Toast.makeText(createAccount.this, "URL = " +URL, Toast.LENGTH_SHORT).show(); getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.webview); getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setSavePassword(true); webSettings.setSaveFormData(true); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(true); final Activity activity = this; mWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { activity.setProgress(progress * 1000); } }); mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); mWebView.clearCache(true); setProgressBarVisibility(true); mWebView.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); } @Override public void onPageFinished(WebView view, String url) { mWebView.loadUrl("javascript:(function () { " + "setVariables("+blah_app.numberSelected+",'"+blah_app.urlSelected+"');" + "})()"); } }); mWebView.loadUrl(URL); } final class DemoJavaScriptInterface { public void setData(String fname, String lname, String gacct, String phone) { SharedPreferences prefCreateAccount = PreferenceManager.getDefaultSharedPreferences(createAccount.this); SharedPreferences.Editor editor = prefCreateAccount.edit(); editor.putString("FirstName", fname); editor.putString("LastName", lname); editor.putString("GmailAcct", gacct); editor.putString("Phone", phone); editor.commit(); } DemoJavaScriptInterface() { } /** * This is not called on the UI thread. Post a runnable to invoke * loadUrl on the UI thread. */ public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { mWebView.loadUrl("javascript:wave()"); } }); } } /** * Provides a hook for calling "alert" from javascript. Useful for * debugging your javascript. */ final class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Log.d(LOG_TAG, message); result.confirm(); return true; } } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { startActivity(new Intent(getApplication(), blah_app.class)); return true; } return super.onKeyDown(keyCode, event); } } 

La solución completa es un poco más de lo que Sana tenía. Se documenta como error en el sitio de Android ( http://code.google.com/p/android/issues/detail?id=7189 ):

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

El problema era que la vista web no estaba recibiendo el foco cuando se cargaba, por lo tanto,

 webView.requestFocus(View.FOCUS_DOWN); 

resuelve el problema.

Estoy sorprendido de que incluso en Android 4.1 (probado en SGS3) el problema todavía está presente, y sobreescribir onTouch () no lo resuelvo para mí.

Código de prueba:

 String HTML = "<html><head>TEST</head><body><form>"; HTML += "<INPUT TYPE=TEXT SIZE=40 NAME=user value=\"your name\">"; HTML += "</form></body></html>"; WebView wv = new WebView(getContext()); wv.loadData(HTML, "text/html", null); final AlertDialog.Builder adb = new AlertDialog.Builder(getContext()); adb.setTitle("TEST").setView(wv).show(); 

Mi solución compleja es reemplazar WebView con MyWebView:

 private static class MyWebView extends WebView { public MyWebView(Context context) { super(context); } // Note this! @Override public boolean onCheckIsTextEditor() { return true; } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_UP: if (!hasFocus()) requestFocus(); break; } return super.onTouchEvent(ev); } } 

Una línea de respuesta y está funcionando bien

 // define webview for browser wb = (WebView) findViewById(R.id.webView1); wb.requestFocusFromTouch(); 

Donde wb es mi objeto de webView

Para aquellos de ustedes que buscan una solución cuando el WebView está en un AlertDialog , la respuesta aquí resuelto este problema para mí: Mostrar teclado suave en AlertDialog con un WebView dentro (Android)

Tenía el mismo problema y no de las soluciones anteriores trabajado. Esto me llamó

  <CustomWebView android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:focusable="true" android:focusableInTouchMode="true" /> 

Tuve el mismo problema con Jelly Bean, pero ninguna de las soluciones anteriores funcionó para mí. Esta solución funcionó para mí en JellyBean

 WebView webView = new WebView(getActivity(), null, android.R.attr.webViewStyle); 

A veces, el android.R.attr.webViewStyle no se aplica de forma predeterminada. Esto asegura que el estilo siempre se aplica.

Tuve un problema similar …. y más tarde encontré que el cuadro de texto en la página web que mi web mostrar mostrada se deshabilitó.

¿Comprueba esto si la página tiene el mismo problema en el navegador?

Yo estaba teniendo el mismo problema exacto ninguna de las soluciones anteriores trabajado para mí. Después de años de intentar finalmente encontré el problema.

Algunas de las páginas web que estaba representando con WebView no encajaban correctamente en la vista Web y, como resultado, una div (o algún otro componente html) se colocaba invisible sobre los campos de entrada. Aunque los campos de entrada aparecían seleccionados cuando se tocaban, no permitirían la entrada de texto (incluso si logré obtener el teclado suave usando la bola de seguimiento).

Así que la solución.

 WebView.getSettings().setUseWideViewPort(true); 

Esto no detendrá completamente el problema, pero hace que la vista sea más como un navegador de PC para el que están diseñados los sitios. Menos cambio de la superposición.

Espero que esto te ayude.

Probar esto -> el nombre es el nombre del campo y asegúrese de que la dosis no tiene atributo autofoco.

  mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { mWebView.loadUrl("javascript:document.getElementById(\"firstname\").focus();"); } }); 
  • ¿Por qué mi WebView no llena el ancho completo de mi pantalla?
  • Los menús desplegables de selección de HTML no funcionan en la vista web de Android
  • WebView oculta el teclado virtual durante loadUrl (), lo que significa que un teclado no puede permanecer abierto mientras llama a javascript
  • Entrada de archivo HTML en android webview (android 4.4, kitkat)
  • Cómo habilitar WebKitDeveloperExtras en WebView de Android
  • Política de seguridad de contenido de WebView
  • Phonegap Media API (Android) - El soporte no está definido
  • ANDROID: Compartir sesión entre Webview y httpclient
  • Creando WebView desde Chromium para Android
  • Uso de navigator.geolocation.getCurrentPosition en WebView en Android 2.0+ (relacionado con PhoneGap)
  • Restaurar historial y página actual al reanudar la visualización web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.