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.

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

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.

  • Cambiar el tamaño de paso de un NumberPicker
  • ¿Cómo configurar este Layout que se ajuste a cualquier altura de pantalla?
  • Android - Personalización del widget Spinner Look and Feel
  • Teclado Android Entrar / Siguiente Button handler
  • Aumento / disminución del espacio entre estrellas en Android por defecto RatingBar
  • Formato personalizado editar entrada de texto android para aceptar número de tarjeta de crédito
  • Comando de voz para desbloquear la pantalla de Android
  • Obtener la posición de la imagen actual en la Galería
  • Cambiar el color de texto de Time Picker
  • Pasar lista de objetos de una actividad a otra actividad en android
  • No se puede cambiar el tamaño del texto del pulgar del widget SwitchCompat
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.