android android-support-library alertdialog android-alertdialog appcompat android-appcompat

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>