Disminuya dinámicamente la altura del diálogo con WebView a medida que cambia el contenido de HTML, ... o corrige la altura

StackOverflow https://stackoverflow.com/questions/6816444

  •  25-10-2019
  •  | 
  •  

Pregunta

Tengo un DialogFragment (que se muestra como un cuadro de diálogo) cuyo diseño contiene un control de WebView. El diseño está configurado para wrap_content. Estoy trabajando en una tableta y quiero mostrar como diálogo, pero no quiero que la altura coincida con la de la pantalla.

La vista web muestra el contenido HTML que se define en la hora de compilación.

El HTML contiene enlaces que pueden ocultar y mostrar contenido (ocultar/mostrar 'divs').

A medida que hago clic en los enlaces para expandirlos, la altura del diálogo aumenta a medida que se muestra el contenido.

Sin embargo, cuando colapso las entradas, la altura del diálogo no se contrae.

Mi preferencia sería arreglar la altura del diálogo después de que el contenido se haya cargado. No se oculta que la altura del diálogo disminuye a medida que el contenido está oculto.

Gracias de antemano, Peter.

¿Fue útil?

Solución 2

Aunque el código necesita limpiar y puede haber formas más finas de hacerlo, pero pongo lo siguiente en el onPageFinished Evento para la vista web y me hace el trabajo de arreglar la altura de diálogo después de que se haya cargado el contenido HTML.

public void onPageFinished(WebView view, String url) {
    ....
    webView.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        if (webView.getHeight() < currentHeight) {
          currentHeight = webView.getHeight();
        }
        final LayoutParams params = webView.getLayoutParams();
        params.height = currentHeight;
        webView.setLayoutParams(params);
        return false;
      }
    });
}

Otros consejos

Intento simple

Intentar invalidate(); en el OnClickListener

yourWebView.setOnTouchListener(new OnTouchListener() { 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        // TRY to invalidate();

        // Try to setVisibility(View.GONE); then directly (View.VISIBLE)      
        return false;
    } 
});

Cosas más duras

  • Navegue a través del código fuente de WebView
  • Siga la ejecución de los clics (creo que debe comenzar loadUrl())
  • Intente llegar al punto que está causando que la vista web se haga más grande cuando se muestra un DIV

Allí, es posible que encuentre una manera de imitar este comportamiento cuando el Div se haya ido

Aunque esto podría ser posible, creo que tener un diálogo que cambia el tamaño ya que el usuario interactúa con él no es una muy buena interfaz de usuario (no conozco su aplicación, así que tal vez podría estar juzgando mal). Quizás debería considerar una actividad regular en lugar de mostrar su WebView en un cuadro de diálogo.

Vengo de un fondo de iOS. Debe usar algo similar a un control de Popover en iPad.

Alternativamente, puede usar LayoutInflator para ajustar el tamaño de la vista. Esta publicación de blog (Layou Resources en Android) parece describir exactamente cómo hacer esto. Parece que la gente ha tenido buenos resultados con esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top