Mit diesem Befehl habe ich die Farbe eines AlertDialog-Titels geändert
alert.setTitle( Html.fromHtml("<font color='#FF7F27'>Set IP Address</font>"));
Aber ich möchte die Farbe der Linie ändern, die unter dem Titel erscheint. wie kann ich das machen ?
Hinweis: Ich möchte kein benutzerdefiniertes Layout verwenden
android
android-alertdialog
Mohammed Subhi Sheikh Quroush
quelle
quelle
Antworten:
Leider ist dies keine besonders einfache Aufgabe. In meiner Antwort hier beschreibe ich, wie Sie die Farbe von a anpassen können,
ListSeparator
indem Sie einfach den von Android verwendeten übergeordneten Stil überprüfen, ein neues Bild erstellen und einen neuen Stil basierend auf dem Original erstellen. Im Gegensatz zumListSeparator
Stil desAlertDialog
Themas sind die Themen leider intern und können daher nicht als übergeordnete Stile bezeichnet werden. Es gibt keine einfache Möglichkeit, diese kleine blaue Linie zu ändern! Daher müssen Sie auf benutzerdefinierte Dialoge zurückgreifen.Wenn das nicht deine Tasse Tee ist ... gib nicht auf! Ich war sehr beunruhigt darüber, dass es keinen einfachen Weg gab, dies zu tun. Deshalb habe ich ein kleines Projekt auf Github eingerichtet, um schnell angepasste Dialoge im Holo-Stil zu erstellen (vorausgesetzt, das Telefon unterstützt den Holo-Stil). Sie finden das Projekt hier: https://github.com/danoz73/QustomDialog
Es sollte leicht möglich sein, von langweiligem Blau zu aufregendem Orange zu wechseln!
Das Projekt ist im Grunde ein Beispiel für die Verwendung eines benutzerdefinierten Dialog-Builders. In diesem Beispiel habe ich eine benutzerdefinierte Ansicht erstellt, die dem IP-Adressbeispiel zu entsprechen scheint, das Sie in Ihrer ursprünglichen Frage angegeben haben.
Mit
QustomDialog
, um einen grundlegenden Dialog (Titel, Nachricht) mit einer gewünschten anderen Farbe für den Titel oder den Teiler zu erstellen, verwenden Sie den folgenden Code:Und um ein benutzerdefiniertes Layout hinzuzufügen (z. B. um die kleine IP-Adresse
EditText
hinzuzufügen), fügen Sie hinzuan den Builder mit einem von Ihnen entworfenen Layout (das IP-Beispiel finden Sie im Github). Ich hoffe das hilft. Vielen Dank an Joseph Earl und seine Antwort hier .
quelle
setItems
in diesem benutzerdefinierten Dialogfeld hinzufügen . Wenn ich die Liste hinzufüge, wird der Titel tatsächlich unter die Liste verschoben. So lösen Sie dieses Problem.Teilerfarbe:
Es ist ein bisschen hacken, aber es funktioniert großartig für mich und es funktioniert ohne externe Bibliothek (zumindest unter Android 4.4).
Weitere Dialog-IDs finden Sie in der Datei alert_dialog.xml . Z.B.
android:id/alertTitle
zum Ändern der Titelfarbe ...UPDATE: Titelfarbe
Hack zum Ändern der Titelfarbe:
quelle
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
hier.DialogFragment
denen die Titelfarbe keine ID hat,android:id/alertTitle
aber ich habe nicht die richtige gefunden.NullPointerException
amsetTextColor()
Überprüfen Sie, ob dies für Sie nützlich ist ...
Details erhalten Sie über den folgenden Link.
http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setCustomTitle%28android.view.View%29
CustomDialog.java
title.xml
quelle
Dadurch wird die Farbe für Titel, Symbol und Teiler festgelegt. Mit jeder neuen Android-Version ändern.
Denken Sie daran, dialog.show () aufzurufen, bevor Sie diese Methode aufrufen.
quelle
Durch Befolgen des Dialog-Quellcodes stellte ich fest, dass der Titel in der Klasse
MidWindow
durch Aufblasen desdialog_title_holo.xml
Layouts generiert wird . so ist die ID vonmTitleView
isttitle
und die ID von Teiler isttitleDivider
.wir können auf id von
title
einfach durch zugreifenandroid.R.id.title
.und Zugriff auf ID von
titleDivider
vonResources.getSystem().getIdentifier("titleDivider","id", "android");
Der letzte Code, mit dem ich die Richtung des Titels und die Farbe geändert habe, ist:
quelle
Wenn Sie dafür keine "Bibliothek" wollen, können Sie diesen schlechten Hack verwenden:
Dies wurde getestet und arbeitet an 4.x; nicht unter getestet, aber wenn mein Gedächtnis gut ist, sollte es für 2.x und 3.x funktionieren
quelle
In der Klasse onCreateView habe ich Folgendes eingefügt:
colorPrimary verweist auf unsere Datei colours.xml, in der alle Farben gespeichert sind. Auch
d.setTitle
ein hacky Weg , um die Titelfarbe einzustellen.quelle
Wenn Sie ein benutzerdefiniertes Layout für den Warndialog erstellen
dann können Sie auf diese Weise leicht hinzufügen, um die Farbe zu ändern
quelle
Wenn Sie ein benutzerdefiniertes Titellayout verwenden , können Sie es wie folgt verwenden
alertDialog.setCustomTitle(customTitle);
Beispiel
Verwenden Sie im UI-Thread einen Dialog wie:
customtitlebar.xml
quelle
Hier ist eine andere Lösung (basierend auf vorgeschlagenen Antworten), die das Styling der Dialoge in einer Klasse übernimmt, ohne sich um den Status des Dialogs kümmern zu müssen, wenn Sie den Stil ändern. Der Dialog kann bereits angezeigt oder nur initialisiert werden.
Anwendungsbeispiel:
Implementierung:
quelle
Ausgehend von dieser Antwort: https://stackoverflow.com/a/15285514/1865860 , gabelte ich das nette Github-Repo von @ daniel-smith und nahm einige Verbesserungen vor:
setItems
Methodeitems_list
setItems
MethodenlistItem
Touch-FeedbackLink: https://github.com/dentex/QustomDialog
quelle
Verwenden Sie anstelle der Verwendung des Teilers im Dialogfeld die Ansicht im benutzerdefinierten Layout und legen Sie das Layout im Dialogfeld als benutzerdefiniertes Layout fest.
custom_popup.xml:
activity.java:
quelle
quelle
Wenn Sie den Dialog erweitern, verwenden Sie Folgendes:
quelle