android - Cómo usar y diseñar el nuevo AlertDialog de appCompat 22.1 y superior
android-support-library android-alertdialog (5)
Estoy tratando de migrar de Android
AlertDialog
predeterminado al nuevo incluido en appCompat-22.1 Hasta ahora entiendo que solo tiene que importar el paquete
android.support.v7.app.AlertDialog
para usarlo.
¿Pero cómo puedo peinarlo? Por ejemplo, cambie los colores del botón positivo / negativo, el color del título, el color del mensaje y el color de fondo.
Al crear el
AlertDialog
, puede establecer un tema para usar.
Ejemplo: creación del cuadro de diálogo
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();
styles.xml: estilo personalizado
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="android:background">#4CAF50</item>
</style>
Resultado
Editar
Para cambiar la apariencia del título, puede hacer lo siguiente. Primero agregue un nuevo estilo:
<style name="MyTitleTextStyle">
<item name="android:textColor">#FFEB3B</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>
luego simplemente haga referencia a este estilo en su
MyAlertDialogStyle
:
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
...
<item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>
De esta forma, puede definir un
textColor
diferente para el mensaje a través de
android:textColorPrimary
y un título diferente para el mensaje a través del estilo.
Para usar un tema para toda la aplicación, y no use el segundo parámetro para diseñar su Diálogo
<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
<item name="alertDialogTheme">@style/dialog</item>
<item name="colorAccent">@color/accent</item>
</style>
<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/accent</item>
</style>
En mi aplicación, usando un acento de color en el tema, no muestre los botones de alerta del Diálogo con el color del tema Acento. Tengo que agregar un estilo de diálogo al tema.
Si desea utilizar el nuevo android.support.v7.app.AlertDialog y tiene diferentes colores para los botones y también tiene un diseño personalizado, eche un vistazo a mi https://gist.github.com/JoachimR/6bfbc175d5c8116d411e
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.custom_layout, null);
initDialogUi(v);
final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
.setTitle(getString(R.string.some_dialog_title))
.setCancelable(true)
.setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
doSomething();
dismiss();
}
})
.setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
})
.setView(v)
.create();
// change color of positive button
d.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
b.setTextColor(getResources().getColor(R.color.colorPrimary));
}
});
return d;
}
Siga la respuesta @reVerse, pero en mi caso, ya tenía algunas propiedades en mi
AppTheme
como
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:textColor">#111</item>
<item name="android:textSize">13sp</item>
</style>
Entonces mi diálogo se verá así
Lo resolví por
1) Cambie la importación de
android.app.AlertDialog
a
android.support.v7.app.AlertDialog
2)
AppTheme
2 propiedades en
AppTheme
con valor nulo
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">#FFC107</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">#FFFFFF</item>
<!-- Used for the background -->
<item name="android:background">#4CAF50</item>
<item name="android:textColor">@null</item>
<item name="android:textSize">@null</item>
</style>
.
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);
Espero que ayude a otras personas
<item name="editTextColor">@color/white</item>
<item name="android:textColor">@color/white</item>
<item name="android:textColorHint">@color/gray</item>
<item name="android:textColorPrimary">@color/gray</item>
<item name="colorControlNormal">@color/gray</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">#30FFFFFF</item>