AlertDialog styling – как изменить стиль (цвет) названия, сообщения и т. Д.

Я немного поразмыслил над этим. Мне нужно сделать, изменить стиль всех AlertDialog s в приложении для Android. Диалоговый фон должен быть белым, а текст должен быть черным. Я пробовал создавать множество стилей, тем и применять их из кода, манифеста и т. Д., Но не добился успеха в отношении цветов текста внутри AlertDialog . Прямо сейчас у меня самый простой из кодов:

Manifest:

 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 

styles.xml:

 <style name="AppTheme" parent="AppBaseTheme"> <item name="android:alertDialogStyle">@style/DialogStyle</item> </style> <style name="DialogStyle" parent="@android:style/Theme.Dialog"> <!-- changing these background stuff works fine --> <item name="android:bottomBright">@android:color/white</item> <item name="android:bottomDark">@android:color/white</item> <item name="android:bottomMedium">@drawable/dialog_footer_bg</item> <item name="android:centerBright">@android:color/white</item> <item name="android:centerDark">@drawable/dialog_body_bg</item> <item name="android:centerMedium">@android:color/white</item> <item name="android:fullBright">@color/orange</item> <item name="android:fullDark">@color/orange</item> <item name="android:topBright">@color/green</item> <item name="android:topDark">@drawable/dialog_header_bg</item> 

Элементы, перечисленные ниже, не работают (пожалуйста, прочитайте комментарии, которые я поставил над каждым элементом):

  <!-- panelBackground is not getting set to null, there is something squarish around it --> <item name="android:panelBackground">@null</item> <!-- Setting this textColor doesn't seem to have any effect at all. Messages, title, button text color, whatever; nothing changes. --> <item name="android:textColor">#000000</item> <!-- Also tried with textAppearance, as follows. Didn't work --> <item name="android:textAppearance">?android:attr/textColorPrimaryInverse</item> <!-- Also tried changing textAppearancePrimary, to no avail --> <item name="android:textColorPrimary">#000000</item> <!-- Also need to change the dialog title text, tried it as follows, dint work: --> <item name="android:windowTitleStyle">@style/DialogWindowTitle</item> </style> 

Тип DialogWindowTitle определяется следующим образом:

 <style name="DialogWindowTitle"> <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item> </style> 

Поэтому никто из них не работает. Может ли кто-нибудь сказать мне, что я могу делать неправильно, и как я могу:

  1. Изменение цвета текста для сообщений (текст контента)
  2. Изменить цвет текста заголовка
  3. Удаление фона панели

Примечание. Мне нужно поддерживать API 8 (2.2) вверх. Кроме того, я рассмотрел большую часть связанного с этим вопроса и группы google, но не могу понять, хотя у меня есть чувство прямо под моим носом!

Изменить: добавление снимка экрана:

AlertDialog не соответствует тематике

Вы должны определить тему для своего AlertDialog и указать ее в теме своей деятельности. Атрибут – alertDialogTheme а не alertDialogStyle . Как это:

 <style name="Theme.YourTheme" parent="@android:style/Theme.Holo"> ... <item name="android:alertDialogTheme">@style/YourAlertDialogTheme</item> </style> <style name="YourAlertDialogTheme"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item> <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item> <item name="android:windowTitleStyle">...</item> <item name="android:textAppearanceMedium">...</item> <item name="android:borderlessButtonStyle">...</item> <item name="android:buttonBarStyle">...</item> </style> 

Вы сможете изменить цвет и текст для заголовка, сообщения, и у вас будет некоторый контроль на фоне каждой области. Я написал сообщение в блоге с подробными инструкциями по созданию стиля AlertDialog.

Удаление фона панели

  <item name="android:windowBackground">@color/transparent_color</item> <color name="transparent_color">#00000000</color> 

Это мой стиль:

  <style name="ThemeDialogCustom"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowBackground">@color/transparent_color</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:colorBackgroundCacheHint">@null</item> </style> 

Который я добавил в конструктор.

Добавить textColor:

 <item name="android:textColor">#ff0000</item> 

Вы должны добавить стиль к конструктору диалога

 builder = new AlertDialog.Builder(this, R.style.DialogStyle); 

Я изменил цвет программно таким образом:

 var builder = new AlertDialog.Builder (this); ... ... ... var dialog = builder.Show (); int textColorId = Resources.GetIdentifier ("alertTitle", "id", "android"); TextView textColor = dialog.FindViewById<TextView> (textColorId); textColor?.SetTextColor (Color.DarkRed); 

Как alertTitle, вы можете изменить другие данные таким образом (следующий пример для titleDivider):

 int titleDividerId = Resources.GetIdentifier ("titleDivider", "id", "android"); View titleDivider = dialog.FindViewById (titleDividerId); titleDivider?.SetBackgroundColor (Color.Red); 

Это в C #, но в java это одно и то же.

Основываясь на ответе @ general03, вы можете использовать встроенный стиль Android для быстрой настройки диалога. Темы диалогов можно найти в разделе android.R.style.Theme_DeviceDefault_Dialogxxx .

Например:

 builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Dialog_MinWidth); builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Dialog_NoActionBar); builder = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_DialogWhenLarge); 

Это зависит от того, сколько вы хотите настроить диалоговое окно предупреждения. У меня есть разные шаги, чтобы настроить диалог оповещений. Посетите: https://stackoverflow.com/a/33439849/5475941

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

Используйте это в своем стиле в своих значениях-v21 / style.xml

 <style name="AlertDialogCustom" parent="@android:style/Theme.Material.Dialog.NoActionBar"> <item name="android:windowBackground">@android:color/white</item> <item name="android:windowActionBar">false</item> <item name="android:colorAccent">@color/cbt_ui_primary_dark</item> <item name="android:windowTitleStyle">@style/DialogWindowTitle.Sphinx</item> <item name="android:textColorPrimary">@color/cbt_hints_color</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item> <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item> </style> 
Intereting Posts
Поддельный реальный звонок на Android Как повернуть файл JPEG на Android без потери качества и получения размера файла? Сериализация в массив байтов бросила исключение IOException (никогда не должно происходить) Нужна помощь, чтобы заставить Android TextWatcher работать со входящими составными данными штрих-кода Как использовать Realm's в методе с Kotlin Предложение: использовать инструменты: overrideLibrary = "android.support.v7.appcompat" для принудительного использования Изменить цвет ScrollBar / FastScroll ListViewView? Rjava.lang.IllegalArgumentException on startActivity (намерение, анимация пакетов) Как превратить григорианский в китайский лунный календарь? Android: сохранение состояния приложения при изменении ориентации экрана SetRetainInstance фрагмент с UI Android Может ли ListView содержать фрагменты AsyncTask – после выполнения, как обновить представление? Android java get html image tag из строки Как я могу получить контекст приложения из службы Android?