Disminuir dinámicamente la altura del diálogo con WebView como cambios de contenido HTML, … o fijar altura

Tengo un DialogFragment (exhibido como 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 un diálogo, pero no quiero que la altura coincidan con la de la pantalla.

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

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

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

Sin embargo, al colapsar entradas, la altura del diálogo no se contrae.

Mi preferencia sería fijar la altura del diálogo después de que el contenido se haya cargado. De lo contrario, la altura del diálogo disminuirá a medida que se oculte el contenido.

Gracias de antemano, Peter.

Simple intento

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 difíciles

  • Navegue por el código fuente del WebView
  • Siga la ejecución de los clics (creo que debe empezar desde loadUrl() )
  • Trate de llegar al punto que está haciendo que el WebView a ser mayor cuando una div se muestra

Allí, usted podría encontrar una manera de imitar este comportamiento cuando la div se ha ido

Aunque el código necesita limpieza y puede haber formas más limpias de hacerlo, pero pongo lo siguiente en el evento onPageFinished para el WebView y hace el trabajo para mí de fijar la altura del diálogo después de que el contenido html se ha cargado.

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

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

Vengo de un fondo de iOS. Es necesario utilizar algo similar a un control popover en iPad.

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

  • Crear una lista de ViewPager: elementos de la lista en blanco
  • Fragmento en ViewPager no restaurado después de popBackStack
  • Fragmentos Detatch / Reattach Vs Mostrar / Ocultar
  • Pantalla completa DialogFragment se superpone con StatusBar
  • SurfaceView UpdateWindow () - NullpointerException
  • Cómo cargar YouTubePlayer utilizando YouTubePlayerFragment dentro de otro Fragmento ?? (Androide)
  • Android: haga que la barra de búsqueda completa pueda hacer clic
  • Android Fragment Animation onResume
  • ¿Cómo destruir Fragmento?
  • Android Espresso: ViewPager no tiene instancia de adaptador
  • Fragmento onCreateView y onActivityCreated llamado dos veces
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.