¿Cómo modificar el estilo de diálogo del sistema en Android?
1. Escribe un estilo de texto.
El título de DIALOG es una vista de texto. En sytles.xml, agregue el siguiente código para configurar su propio estilo de texto:
2. Establezca el tema del título del cuadro de diálogo.
El texto del título anterior no se puede establecer directamente como estilo de título del cuadro de diálogo. También necesitamos escribir un estilo que represente el tema del título, donde especificamos el estilo de texto del título. El código es el siguiente:
< item name="android:scrollHorizontally">true
< /style>
3. Establezca el tema del cuadro de diálogo.
A continuación, escribimos el tema de nuestro cuadro de diálogo, especificando aquí el tema del título. Dado que algunas propiedades no son públicas, debemos heredar de un estilo original. El código es el siguiente:
4. Personaliza el tema de la aplicación.
A continuación, debemos especificar nuestro cuadro de diálogo para usar este tema en nuestro tema de aplicación, por lo que debemos definir un tema de aplicación. Además, dado que muchas propiedades del tema de la aplicación no son públicas (como la línea azul debajo del título que se menciona a continuación), tenemos que heredar de un estilo nativo. Aquí seleccioné Theme.Holo.Light.NoActionBar según las necesidades del programa. El código es el siguiente:
5. Especifique el tema de la aplicación.
En el último paso, debemos especificar el tema de nuestra aplicación en el archivo AndroidManifest.xml. Este paso es muy simple. Solo necesitas especificar el valor de android:theme en la etiqueta de la aplicación, de la siguiente manera:
android:theme="@style/ParkingTheme"
Pero. Este es sólo un tema de diálogo de especificación. Si el cuadro de diálogo se crea a través de AlertDialog, el tema sigue siendo el original. Entonces todavía necesitamos los siguientes pasos.
7. Escribe el tema AlertDialog.
No podemos heredar directamente el estilo de AlertDialog en el tema del sistema. Si el padre se especifica como Theme.DeviceDefault.Dialog.Alert, Theme.Holo.Dialog.Alert, Theme.DeviceDefault.Light.Dialog.Alert o Theme.Holo.Light.Dialog.Alert, la compilación fallará. Entonces necesitamos heredar el estilo de Dialog. Aquí tomo Theme.Holo.Light.Dialog como ejemplo, el código es el siguiente:
Aquí me refiero al estilo nativo alertDialog y configuro los dos atributos importantes del fondo de la ventana para que sean transparentes y windowContentOverlay como nulo; de lo contrario, Verá que hay un fondo del cuadro de diálogo debajo de AlertDialog, o el fondo del cuadro de diálogo bloquea todo el contenido.
8. Especifique el tema de AlertDialog.
Necesitamos agregar una línea de código al AppTheme personalizado mencionado en el paso 4 para especificar el estilo de AlertDialog que se utilizará. El código es el siguiente:
9. Modifique la línea azul debajo del título.
Si cambias el color del tema del cuadro de diálogo, la línea azul debajo del título definitivamente te deprimirá mucho. Si hay menos cuadros de diálogo, puede optar por ocultar el título y luego personalizar una Vista que contenga el título para establecerlo como contenido del cuadro de diálogo. Pero si tiene muchos tipos de cuadros de diálogo y todos pueden generarse llamando a la API original, definitivamente será muy confuso definir tantas vistas tituladas.
La línea azul debajo del título no está configurada en Dialog o AlertDialog ni definida en su estilo. Se define en el diseño de varios estilos de diálogo y luego los atributos correspondientes del diálogo se especifican en AppTheme. Desafortunadamente, veo que estas propiedades relacionadas aún no son públicas y usted mismo no puede configurarlas, por lo que solo se pueden implementar mediante código Java.
La línea azul se llama titleDivider. Podemos obtener su IP a través de la API getResources() y luego configurar el color. El código es el siguiente:
public static final void dialogTitleLineColor(Dialog dialog, int color) {
Context context = dialog.getContext();
int divierId = contexto .getResources().getIdentifier("android:id/titleDivider", null, null);
Ver divisor = dialog.findViewById(divierId);
divider.setBackgroundColor (color);