it-swarm.com.ru

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

Я ломаю голову над этим совсем немного. Что мне нужно сделать, так это изменить стиль всех AlertDialogs в моем приложении 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 not themed as expected

40
Aswin Kumar

Вам нужно определить тему для своего 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.

48
David Ferrand

убрать фон панели

 <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>
14
Terril Thomas

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

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

Вот мой код для темы диалогового окна предупреждения:

<style name="alertDialog" parent="Theme.AppCompat.Dialog.Alert">
    <item name="Android:background">@color/light_button_text_color</item>
    <item name="Android:textColor">@Android:color/black</item>
    <item name="Android:textColorPrimary">@Android:color/black</item>
    <item name="Android:textColorSecondary">@Android:color/black</item>
    <item name="Android:titleTextColor" tools:targetApi="m">@Android:color/black</item>
</style>

Поместите этот код в styles.xml. В вашем Java примените эту тему как:

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

Вывод кода

8
Anuj Gupta

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

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 это то же самое.

5
StefanoM5

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

enter image description hereenter image description hereenter image description hereenter image description here

2
Vahid

Основываясь на ответе @ 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);
2
Jeshurun

Используйте это в своем стиле в вашем values-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>

А для предустановленных устройств Lollipop поместите его в values ​​/ 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>

<style name="DialogWindowTitle.Sphinx" parent="@style/DialogWindowTitle_Holo">
       <item name="Android:textAppearance">@style/TextAppearance.Sphinx.DialogWindowTitle</item>
</style>

<style name="TextAppearance.Sphinx.DialogWindowTitle" parent="@Android:style/TextAppearance.Holo.DialogWindowTitle">
        <item name="Android:textColor">@color/dark</item>
        <!--<item name="Android:fontFamily">sans-serif-condensed</item>-->
        <item name="Android:textStyle">bold</item>
</style>
1
msmukesh4