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.
- Android Recyclerview lag mientras se desplaza hacia abajo
- Androide. Fragmento getActivity () a veces devuelve null
- Objetos de comunicación entre fragmentos múltiples en ViewPager
- Android reemplaza el fragmento dentro de un fragmento
- Viewpager + FragmentpagerAdapet + Fragmentos + ListView = aplicación insanamente lenta
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.
- StartActivityForResult no funciona en Fragment
- Horizontalmente desplazables tabulaciones dentro de un fragmento en una actividad
- Reemplazar un Fragmento consigo mismo no muestra nada
- Cuando un fragmento ha perdido el foco y luego recupera el enfoque, ¿por qué su método onResume () nunca se llama en el período?
- Android TabLayout no muestra contenido tan pronto como el fragmento se cambia
- TabLayout con ViewPager no funciona dentro de fragmento Android
- Evitar reiniciar fragmento asynctask en cambio de orientación de pantalla
- ANDROID: ViewPager con diferentes fragmentos en el método instantiateItem
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.
- Lectura de datos de 4 archivos CSV estáticos en Android: Best Approach?
- Mi var pública es invisible a su primo