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.
- Trigger o Force Redraw o Re-Render de WebView
- ERROR / Web Console: Uncaught TypeError: No se puede llamar al método 'getItem' de null en http://m.youtube.com/:844
- Método restorePicture de WebView - Impedir que la vista web vuelva a cargar la página
- Detener evento táctil de ser interceptado por ViewPager si hay evento táctil en la vista web
- ¿Cómo anular algunos eventos de gestos en una webview, pero dejar que otros a través de?
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); } }
- Vista Web de Android
- Android WebView: deshabilitar el degradado del borde amarillo de desplazamiento
- Solicitud de URL de visualización web de Android con cadena de consulta
- Cómo configurar la cookie en el cliente androide de WebView
- Android, captura de url de redirección webview
- Android WebView desplazamiento suave
- No se puede seleccionar la opción en la vista web de android
- Android webview página recarga después de la captura de imagen y cargar en android 5 +
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();"); } });
- Convertir un lienzo en imagen de mapa de bits en android
- Cómo dibujar un círculo con animación en android con el tamaño del círculo basado en un valor