Android dialogFragment "a veces" no muestra la vista web
Tengo un DialogFragment con un WebView dentro de él. Si la vista web no carga la página lo suficientemente rápido, el DialogFragment se reducirá por completo y no mostrará la vista web. De lo contrario, si la carga fue rápida, se muestra el WebView.
- Pantalla en blanco de Android en onBack en un archivo loadDataWithBaseURL
- WebView getScrollY () siempre devuelve 0
- ¿Mostrar anuncios nativos dentro del contenido de WebView en Android?
- El selector de archivos no funciona en Samsung Tab 3 Android 4.4
- Interceptar solicitud de fuente de video HTML5 en Android WebView
- ¿Cómo puedo ocultar el control de zoom en una vista web de Android?
- Cambiar el color de arrastrar cursor del cuadro de entrada de webview de android
- ¿Existe un límite de longitud de la clave (cadena) en el objeto JS?
- Método restorePicture de WebView - Impedir que la vista web vuelva a cargar la página
- Detectar el error de carga de recursos de la webview de android
- WebView Android "tel:" enlaces muestran página web no encontrada
- Deshabilitar el almacenamiento en caché, las cookies y todo lo demás en un WebView
- No se puede obtener la URL actual del evento de clic de WebView en Android
Encontré la solución por mí mismo. Si utiliza LinearLayout como la vista raíz de DialogFragment esto sucederá, cambiarlo a FrameLayout resolvió el problema. No entiendo por qué, pero funciona.
En mi caso, he utilizado WebView personalizado como ExpandableHeightWebView
para la altura dinámica.
@Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (isExpanded()) { int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
Estoy llamando a setExpanded(true);
Después de myWebView.loadData(data,null);
Este problema resuelto cuando setExpanded(true);
línea.
Si puede cargar la vista web a través de AsyncTaks el fragmento de diálogo no se muestra porque AsyncTasks no puede cambiar el diseño que está en el subproceso principal. Mira esto.
Lo intenté en dos dispositivos.
En el primer dispositivo Nexus 6 funcionó como decir David "He encontrado la solución por mí mismo.Si utiliza LinearLayout como la vista de la raíz de su DialogFragment esto sucederá, cambiarlo a FrameLayout resuelto el problema.No entiendo por qué, pero funciona" . Pero lo intenté en el segundo dispositivo (Galaxy Prime) y la sorpresa, no funcionó. Después de intentar hacer setVisible GONE WebView en mi WebViewClient dentro callback onPageStarted()
y después de setVisible VISIBLE dentro callback onPageFinished()
y trabajó para mi.
public class MyWebClient extends WebViewClient { private static final String LOG_CAT = "NetPayWebClient"; @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.e(LOG_CAT, "onPageStarted(): " + url); view.setVisibility(View.GONE); super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { Log.e(LOG_CAT, "onPageFinished(): " + url); view.setVisibility(View.VISIBLE); super.onPageFinished(view, url); } }
- Cómo eliminar / ocultar el logotipo de Paypal de Card.io Phonegap iOS y Android?
- ¿Cómo resolver el requisito de permiso setMyLocationEnabled?