Progress Dialog aparece extrañamente en dispositivos Pre-lollipop
Mi diálogo de progreso en dispositivos pre-lollipop aparece así:
¿Ves esa ventana doble? No tengo ni idea de por qué esto sucede.
- Android - Descargas de archivos grandes detener - utilizando async / progressdialog
- No se puede descartar el diálogo de progreso
- Android: ProgressDialog no se muestra
- Android: mostrando un diálogo de progreso
- Java.lang.IllegalStateException: ActionBarImpl sólo se puede utilizar con un diseño de ventana de decoración compatible
Código
-
Inicializando el diálogo de progreso de esta manera:
progressDialog = new ProgressDialog(context); progressDialog.setMessage(messsage); progressDialog.setIndeterminate(true); progressDialog.setCancelable(false);
-
Definió un estilo como este en valores y valores-21:
<style name="AlertDialog.Theme" parent="Theme.AppCompat.Light.Dialog"> <item name="android:textColorPrimary">@color/black</item> <item name="android:background">@color/white</item> <item name="android:textColor">@color/black</item> <item name="colorAccent">@color/orange</item> <item name="colorPrimary">@color/orange</item> <item name="colorPrimaryDark">@color/darkerorance</item> </style>
- Después de una cierta búsqueda en google, agregué el estilo alerta en mi tema principal como esto:
<item name="android:dialogTheme">@style/AlertDialog.Theme</item> <item name="dialogTheme">@style/AlertDialog.Theme</item> <item name="android:alertDialogTheme">@style/AlertDialog.Theme</item> <item name="alertDialogTheme">@style/AlertDialog.Theme</item>
Y el tema principal se extiende desde Theme.AppCompat.Light.NoActionBar
.
Esto funciona muy bien en Lollipop y arriba , pero aparece como en la imagen de pre-lollipop. ¿Puede alguien ayudar aquí y decirme qué estoy haciendo mal?
- ¿Qué significa 'indeterminado' en ProgressDialog?
- Android: ¿Cómo cambiar el color de texto de ProgressDialog?
- Android: ProgressDialog.show () se bloquea con getApplicationContext
- Android - ¿Cómo hacer un diálogo de progreso incrustado en la interfaz de usuario?
- ProgressDialog creado desde onCreateDialog deja de animar en segunda ejecución
- ¿Cómo mostrar el estado de la barra de progreso por porcentaje mientras se suben los datos de json?
- Conmutación de pantalla negra entre actividad
- Determinar ProgressDialog en Android
Mi solución fue crear un tema y un estilo separados para pre-Lollipop con el parámetro android:windowBackground
como transparente. Esto quita el segundo fondo en la parte posterior.
<style name="AppCompatAlertDialogStyleNoWindow" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:windowBackground">@color/transparent</item> </style>
A continuación, agregue este estilo como el android:alertDialogTheme
para el tema pre-Lollipop.
Estoy un poco tarde de responder, pero esto es cómo he conseguido alrededor de resolverlo.
He creado un v-14
styles.xml
y definido un estilo como se muestra a continuación
Values-v14 / styles.xml
<style name="AlertDialog.Holo" parent="@android:style/Theme.Holo.Light.Dialog"> <item name="android:textColorPrimary">@color/black</item> <item name="android:textColor">@color/black</item> <item name="android:textAppearance">@style/Helvetica.Regular</item> <item name="android:windowTitleStyle">@style/DialogTitleStyle</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> </style>
PS – textAppearance y windowTitleStyle son estilos que había creado para las fuentes personalizadas.
El estilo de diálogo de alerta regular (values / styles.xml) utilizado es:
<style name="AlertDialog.Theme" parent="Theme.AppCompat.Light.Dialog"> <item name="android:textColorPrimary">@color/black</item> <item name="android:textColor">@color/black</item> <item name="colorAccent">@color/zifycolor</item> <item name="colorPrimary">@color/zifycolor</item> <item name="colorPrimaryDark">@color/zifycolorDarker</item> <item name="android:windowTitleStyle">@style/DialogTitleStyle</item> <item name="buttonBarButtonStyle">@style/AlertDialogButtonStyle</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
Finalmente para mostrar un diálogo de progreso:
/** * Create a progress dialog. The appropriate theme gets applied. * * @param context valid context with a window * @param messsage message to show * @return {@code ProgressDialog} instance */ public static ProgressDialog createProgressDialog(@NonNull final Context context, @NonNull String messsage) { ProgressDialog progressDialog; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) progressDialog = new ProgressDialog(context, R.style.AlertDialog_Theme); else progressDialog = new ProgressDialog(context, R.style.AlertDialog_Holo); progressDialog.setMessage(messsage); progressDialog.setCancelable(false); return progressDialog; }
¡Hasta ahora funciona muy bien! Espero que ayude a alguien.
No estilo de los diálogos, si desea utilizar estilos de material en dispositivos pre lolipop, a continuación, hacer uso de las bibliotecas
Ejemplo
Es muy fácil de usar.
Su respuesta no está funcionando para pre-Lollipop (probado en la API 19). Pero encuentro solución: necesitas usar android.support.v7.app.AlertDialog
(en la configuración de importación)