Как использовать и настраивать новый AlertDialog из appCompat 22.1 и выше

Я пытаюсь перенести из default android AlertDialog в новый, включенный в appCompat-22.1. До сих пор я понимаю, что вам нужно импортировать пакет android.support.v7.app.AlertDialog , чтобы использовать его.

Но как я могу его стилизовать? Например, измените цвет кнопки / цвет кнопки, цвет заголовка, цвет сообщения и цвет фона?

Solutions Collecting From Web of "Как использовать и настраивать новый AlertDialog из appCompat 22.1 и выше"

При создании AlertDialog вы можете установить тему для использования.

Пример – создание диалога

 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 – Пользовательский стиль

 <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> 

результат

Стиль alertdialog

редактировать

Чтобы изменить внешний вид заголовка, вы можете сделать следующее. Сначала добавьте новый стиль:

 <style name="MyTitleTextStyle"> <item name="android:textColor">#FFEB3B</item> <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item> </style> 

После этого просто MyAlertDialogStyle этот стиль в MyAlertDialogStyle :

 <style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> ... <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item> </style> 

Таким образом вы можете определить другой textColor для сообщения через android:textColorPrimary и другое для названия через стиль.

Чтобы использовать тему для всего приложения, и не используйте второй параметр для стиля диалога

 <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> 

В моем приложении с использованием акцента цвета в теме не отображаются кнопки alertDialog с темой colorAccent, я должен добавить стиль диалога в тему.

Если вы хотите использовать новый файл android.support.v7.app.AlertDialog и иметь разные цвета для кнопок, а также иметь собственный макет, посмотрите на мой 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; } 

Введите описание изображения здесь

Следуйте за ответом @reVerse, но в моем случае у меня уже было какое-то свойство в моей AppTheme например

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ... <item name="android:textColor">#111</item> <item name="android:textSize">13sp</item> </style> 

Таким образом, мой диалог будет выглядеть так:
Введите описание изображения здесь

Я решил это

1) Измените импорт из android.app.AlertDialog в android.support.v7.app.AlertDialog
2) Я переопределяю свойство 2 в AppTheme с нулевым значением

 <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); 

Надеюсь, это поможет другим людям

Введите описание изображения здесь

  <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>