2011-04-06 21 views
13

En mi aplicación para Android creo un AlertDialog que tiene un WebView dentro. El WebView carga una página web que requiere que el usuario inicie sesión. Sin embargo, cuando hago clic en los campos de texto en el WebView, no aparece el teclado virtual. Soy consciente del problema en general (Android: Issue 7189); sin embargo, en mi caso, la solución sugerida no parece funcionar, ya que utilizo un sitio web externo, y no solo un formulario HTML simple.Mostrar teclado suave en AlertDialog con WebView dentro (Android)

La solución perfecta sería si el teclado aparece cuando el usuario hace clic en los campos de texto del sitio web. Sin embargo, tener el teclado junto con el AlertDialog también funcionaría. ¿Algunas ideas?

Respuesta

21

Parece que la mejor solución es simplemente crear un cuadro de diálogo personalizado. Los cuadros de diálogo personalizados no parecen tener el error de teclado blando en absoluto (aparece exactamente cuando es necesario). Aquí hay algo de código básico:

Dialog dialog = new Dialog(this); 
dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); 
dialog.setContentView(R.layout.dialog); 
dialog.setTitle("My great title"); 
dialog.setCancelable(true); 

dialog.show(); 
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.icon); 

WebView vw = (WebView) dialog.findViewById(R.id.wv); 
+2

Por favor, comparta su código completo. Tengo el mismo problema, pero no estoy cargando mi vista web en el cuadro de diálogo. Lo estoy lanzando en una actividad y presionar en cualquier campo de texto no muestra el teclado. ayúdame –

+1

Gracias! para mí, el AlertDialog era el problema, ¡cuando se cambia a Dialog, funciona! intenté todas las soluciones posibles con AlertDialog, focus, viewport, touch listeners, clases de webview personalizadas, etc. ... –

+0

@AZ_ si no está usando un diálogo, ¿cómo es el mismo problema? – eis

0

Si sigue siendo relevante, para mí el problema estaba relacionado con un cuadro de diálogo de inmersión + vistas web.

he anulan el cuadro de diálogo muestran método para lograr inmersión mediante el establecimiento de una bandera - no se centran en la ventana de diálogo, una vez que se lo quité me perdieron los immersivnes pero ahora mi aparece de diálogo web UO el teclado ...

1

Existe una solución mucho mejor (con AlertDialog).

  1. Extender Clase de WebView.

    public static class LocalWebView extends WebView { 
        public LocalWebView(Context context) { 
         super(context); 
        } 
    
        public LocalWebView(Context context, AttributeSet attrs) { 
         super(context, attrs); 
        } 
    
        public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr) { 
         super(context, attrs, defStyleAttr); 
        } 
    
        @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
        public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
         super(context, attrs, defStyleAttr, defStyleRes); 
        } 
    
        public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) { 
         super(context, attrs, defStyleAttr, privateBrowsing); 
        } 
    
        @Override 
        public boolean onCheckIsTextEditor() { 
         return true; 
        } 
    } 
    
  2. Utilice esta LocalWebView en lugar de WebView origen en la disposición que se establece a AlertDialog como ver el contenido.

+1

Gracias, funciona. También puede usar diectly: 'nueva WebView (this) { @Override public boolean onCheckIsTextEditor() { return true; } }; ' – crgarridos

+0

@crgarridos funcionó a la perfección –

Cuestiones relacionadas