Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.

  • Propósito de navegación que funcionaría con mapas y waze
  • RecyclerView Expandir / Contraer elementos
  • El depurador de Android Studio no muestra variables locales
  • $ http solicitud estado 0 con https
  • Phonegap, conexión al servidor sin éxito
  • ¿Es posible activar o desactivar la vibración en Sony Smartwatch 2 (por aplicación)?
  • 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); } } 

  • Cómo obtener datos de DialogFragment a un fragmento?
  • Cómo borrar todas las filas de un TableLayout?
  • SMS_RECEIVED no funciona en Ice Cream Sandwich?
  • Superposición de la barra de acción no funciona
  • Android - Centre TextView Horizontalmente en LinearLayout
  • Problemas con pantallas de preferencias de doble panel
  • 10 Solutions collect form web for “WebView textarea no aparece el teclado”

    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();"); } }); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.