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


Teclado suave de Android no abierto en webView`

Estoy usando WebView en AlertDialog para autenticar al usuario a twitter. Pero cuando hago clic en el campo en webview, el teclado android no abre. Aquí está mi código que muestra cómo he añadido webview en el diálogo de alerta. I implícitamente llamar al teclado de Android, pero abre el teclado detrás del diálogo de alerta.

Aquí está mi código.

  • Android: ¿Cómo vas a otra actividad al hacer clic?
  • ¿Por qué TextView en una línea elipsized con los cuadros de la demostración del "extremo"?
  • GetExternalFilesDir alternativa en android 2.1
  • ¿Cómo instalo APK usando el script de actualización de Android?
  • Android: ¿Cómo determinar el índice de caracteres de la posición de un evento táctil en TextView?
  • AsyncTask: doInBackground no se llama
  • public static void webViewDialog(final String authorizationURL, final int type) { final boolean correctPin; System.out.println("In webViewDialog"); container = new LinearLayout(context); container.setOrientation(LinearLayout.VERTICAL); container.setMinimumWidth(200); container.setMinimumHeight(320); webView = new WebView(context); webView.setMinimumWidth(200); webView.requestFocusFromTouch(); webView.setMinimumHeight(380); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new TwitterWebViewClient()); webView.loadUrl(authorizationURL); webView.setBackgroundColor(0xFFbbd7e9); container.addView(webView); Builder webDialog = new AlertDialog.Builder(context); webDialog.setView(container).setTitle("Twitter Login") .setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (type == 0) { twitterPinCodeDialog(); dialog.dismiss(); } } }).show(); showVirtualKeyboard(); } public static void showVirtualKeyboard() { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { InputMethodManager m = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); if(m != null) { // m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); } } }, 100); } 

  • SecurityException al llamar a getLastKnownLocation
  • Cómo serializar / deserializar arrayList (Object)
  • SIP: ERROR DATA_CONNECTION_LOST
  • Haga clic en la notificación GCM para no abrir la actividad deseada en Android Kitkat
  • El widget de comprobación se coloca en la pantalla de Android
  • ¿Es posible ejecutar Android Device Emulator (a través de Android Studio 2) en VMWare?
  • 5 Solutions collect form web for “Teclado suave de Android no abierto en webView`”

    Aquí está mi solución a este problema:

    Poner un texto de edición de maniquí, y establecer su visibilidad a GONE , y añadirlo a un LinearLayout que contiene, después de agregar el WebView al diseño.

    Ejemplo:

     AlertDialog.Builder builder = new AlertDialog.Builder(this); LinearLayout wrapper = new LinearLayout(this); WebView webView = new WebView(this); EditText keyboardHack = new EditText(this); keyboardHack.setVisibility(View.GONE); webView.loadUrl(url); wrapper.setOrientation(LinearLayout.VERTICAL); wrapper.addView(webView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); wrapper.addView(keyboardHack, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); builder.setView(wrapper); builder.create().show(); 

    Una vez hecho esto, todo debería funcionar correctamente, y cuando se selecciona un elemento en el WebView, el teclado aparece como se esperaba.

    Estoy utilizando un PopupWindow con un WebView dentro de él y experimentado el mismo problema, pero si fijo focusable a verdadero en el padre el problema desaparece:

     popupWindow.setFocusable(true); 

    ¡Espero que esto ayude!

    También sufro de este problema, solucioné este problema personalizando el diálogo, aquí está mi código de diálogo de encargo, espero así que esto es uso completo para usted.

      TwitterDialog fb=new TwitterDialog(this); fb.abc(); //fb.dismiss(); class TwitterDialog extends Dialog { Context context; String url="https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2"; public TwitterDialog(Context context) { super(context); this.context=context; } void abc(){ LinearLayout mContent = new LinearLayout(context); mContent.setOrientation(LinearLayout.VERTICAL); final float scale = context.getResources().getDisplayMetrics().density; float[] dimensions =new float[]{400.0f,500.0f}; addContentView(mContent, new FrameLayout.LayoutParams( (int) (dimensions[0] * scale + 0.5f), (int) (dimensions[1] * scale + 0.5f))); FrameLayout.LayoutParams FILL = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); WebView mWebView = new WebView(context); mWebView.setVerticalScrollBarEnabled(false); mWebView.setHorizontalScrollBarEnabled(false); mWebView.setWebViewClient(new WebClicent()); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl(url); mWebView.setLayoutParams(FILL); mContent.addView(mWebView); TwitterDialog.this.show(); } class WebClicent extends WebViewClient{ @Override public void onLoadResource(WebView view, String url) { System.out.println("onLoadResource "+url); super.onLoadResource(view, url); } @Override public void onPageFinished(WebView view, String url) { System.out.println("onPageFinished "+url); //TwitterDialog.this.dismiss(); super.onPageFinished(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { System.out.println("onPageStarted "+url); super.onPageStarted(view, url, favicon); } } }//TWitterDialog 

    Tuve un problema similar y lo resolví de esta manera:

    1. Anule el método onCreateView () en el fragmento de diálogo y defino toda la configuración de la vista de contenido para mi vista web.

       @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.webview, container, false); // do some config // some other stuffs loginpage.loadUrl(url); return view; } 
    2. En el método onCreateDialog () sólo añadir estos.

       @Override public Dialog onCreateDialog(Bundle savedInstaceState) { Dialog dialog = super.onCreateDialog(savedInstaceState); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); return dialog; } 

    En mi caso quería mostrar un diálogo sin título. Así que debido a la DialogBuilder cuidar de la creación de la vista de diálogo he decidido anular el onCreateView () y acaba de llamar a la super.onCreateDialog () y agregar mi configuración de la ventana.

    La razón por la que su teclado puede no aparecer, es probablemente porque está utilizando un dispositivo que ya tiene un teclado duro. CUALQUIER DISPOSITIVO CON UN TECLADO FÍSICO no necesita mostrar un teclado suave … Es por eso que no está mostrando. Porque el dispositivo o el emulador tiene un teclado físico duro.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.