web-dev-qa-db-de.com

AlertDialog - Stil - wie man den Stil (die Farbe) von Titel, Nachricht usw. Ändert

Ich habe mir darüber ziemlich den Kopf gebrochen. Was ich tun muss, ist, den Stil aller AlertDialogs in meiner Android) -Anwendung zu ändern - der Dialoghintergrund muss weiß und der Text schwarz sein. Ich habe versucht, eine Vielzahl von Stilen, Themen und Anwendungen aus dem Code, Manifest usw. zu erstellen, aber im Hinblick auf die Textfarben in AlertDialog keinen Erfolg. Im Moment habe ich den einfachsten Code festgelegt so was:

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>

Die unten aufgeführten Punkte funktionieren nicht (bitte lesen Sie die Kommentare, die ich über die einzelnen Elemente geschrieben habe):

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

Der DialogWindowTitle ist wie folgt definiert:

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

Keines davon funktioniert also. Kann mir jemand sagen, was ich falsch machen könnte und wie ich:

  1. Textfarbe für Nachrichten ändern (Inhaltstext)
  2. Titeltextfarbe ändern
  3. Entfernen Sie den Panel-Hintergrund

Hinweis: Ich muss API 8 (2.2) aufwärts unterstützen. Außerdem habe ich die meisten der hier gestellten Fragen und Google Groups durchgearbeitet, kann es aber nicht herausfinden, obwohl ich das Gefühl habe, dass es direkt unter meiner Nase liegt!

Bearbeiten: Screenshot hinzufügen:

AlertDialog not themed as expected

40
Aswin Kumar

Sie müssen ein Thema für Ihren AlertDialog definieren und es im Thema Ihrer Aktivität referenzieren. Das Attribut ist alertDialogTheme und nicht alertDialogStyle. So was:

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

Sie können die Farbe und das Aussehen des Texts für den Titel und die Nachricht ändern und den Hintergrund jedes Bereichs steuern. Ich habe einen Blog-Post geschrieben, in dem die Schritte zum Erstellen eines AlertDialogs beschrieben sind.

48
David Ferrand

Entfernen Sie den Panel-Hintergrund

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

Das ist mein Stil:

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

Was ich dem Konstruktor hinzugefügt habe.

Add textColor:

<item name="Android:textColor">#ff0000</item>
14
Terril Thomas

Sie müssen den Stil dem Konstruktor des Dialogfelds hinzufügen

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

Hier ist mein Code, um das Warnungsdialogfeld zu gestalten:

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

Platzieren Sie diesen Code in styles.xml. Wenden Sie in Ihrem Java dieses Thema an als:

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

Ausgabe des Codes

8
Anuj Gupta

Ich habe die Farbe programmatisch folgendermaßen geändert:

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

als alertTitle können Sie andere Daten folgendermaßen ändern (nächstes Beispiel für titleDivider):

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

dies ist in C #, aber in Java ist es das gleiche.

5
StefanoM5

Es hängt davon ab, wie stark Sie den Warnungsdialog anpassen möchten. Ich habe verschiedene Schritte, um den Warnungsdialog anzupassen. Bitte besuchen Sie: https://stackoverflow.com/a/33439849/5475941

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

2
Vahid

Aufbauend auf der Antwort von @ general03 können Sie den integrierten Stil von Android verwenden, um den Dialog schnell anzupassen. Sie finden die Dialogthemen unter Android.R.style.Theme_DeviceDefault_Dialogxxx.

Beispielsweise:

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

Verwenden Sie dies in Ihrem Style in Ihrem 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>

Und für Pre-Lollipop-Geräte geben Sie values ​​/ style.xml ein

<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