Ich habe einen Warndialog in der App, wie unten gezeigt.
Ich möchte, dass der Titel und die Zeile, die den Titel - Nachrichtentext trennt, orange sind. Wie kann ich das machen? Was ich versuchte, ist benutzerdefinierte Stil wie unten gezeigt. Aber das hat nicht funktioniert.
%Vor%mein Alarmdialogcode:
%Vor%Anstelle von:
%Vor%Versuchen Sie Folgendes:
%Vor%HINWEIS: Dies ist nur für API 11 (Android 3.0) und höher verfügbar.
Wenn Sie Android & lt unterstützen müssen; 3.0 Sie müssen wahrscheinlich einen benutzerdefinierten Dialog erstellen (anstatt AlertDialog
EDIT Hinzugefügt wirklich sleazy Reflexion-basierten Hack
Wenn Sie wirklich festgefahren sind und keinen benutzerdefinierten Dialog implementieren möchten, versuchen Sie Folgendes:
Nachdem Sie das Dialogfeld erstellt haben und kurz bevor Sie es zurückgeben möchten, anstatt:
%Vor%tu dies:
%Vor%Fügen Sie nun diese sehr unangenehme, auf Reflexion basierende Methode hinzu:
%Vor% Ich habe das auf Android 2.2 und Android 4.0 getestet und es funktioniert. Es kann nicht genau das tun, was Sie wollen, also müssen Sie es versuchen. Ich kann nicht garantieren, dass es auf allen Geräten oder auf zukünftigen Versionen von Android funktioniert, da es sehr davon abhängt, wie die AlertDialog
-Klasse implementiert wird (wenn sie das in Zukunft ändern, wird das wahrscheinlich nicht mehr funktionieren).
Nur ein paar Notizen für alle, die sich interessieren:
Der Grund, warum ich setOnShowListener()
verwende, liegt darin, dass Sie nicht wirklich zu den internen View
-Objekten gelangen, die AlertDialog
verwendet, bis sie aufgeblasen sind. Sie werden nicht sofort aufgeblasen, wenn Sie ein AlertDialog
erstellen, das passiert später. Mit dem Listener können wir die Kontrolle übernehmen, nachdem das Layout aufgebläht wurde, aber bevor% code% angezeigt wird.
Ich verwende die Reflektion für den Zugriff auf interne Membervariablen in der Dialog
-Implementierung. Sobald ich Zugriff auf die AlertDialog
habe, die den Titel enthält, muss ich herumspielen, um die horizontale Linie zu finden, die verwendet wird, um den Titel von der Nachricht zu trennen. Dazu erhalte ich den TextView
, der den Titel umgibt (dieser Layout
enthält das Alarmsymbol und den Titeltext). Dann bekomme ich die Layout
, die das umgibt (diese Layout
umschließt das Icon, den Titeltext und das Trennzeichen). Dann schaue ich mir alle Kinder des umgebenden Layouts an und setze die Farbe auf alle Layout
Objekte dort. Das Trennzeichen wird als ImageView
mit einem Zeichen implementiert, daher ist es nicht möglich, nur die Farbe zu ändern. Hinweis: Eine Alternative zur Verwendung von ImageView
wäre, das Zeichen im ImageView durch ein entsprechend farbiges Zeichen zu ersetzen.
Danke für die Herausforderung, es hat Spaß gemacht, das herauszufinden :-D
Versuchen Sie, ein custom layout
für das Dialogfeld zu erstellen, und geben Sie dieses layout
mit Hilfe von
Sie können dieses Beispiel für einen benutzerdefinierten Dialog sehen.
Sie können dieses Projekt AlertDialogPro verwenden. Fügen Sie dieses Projekt Ihrem Projekt hinzu und definieren Sie Ihr Thema wie folgt:
%Vor%Geben Sie dieses Thema für das Thema Ihrer App mit dem Attribut "alertDialogProTheme" an:
%Vor%Verwenden Sie AlertDialogPro.Builder zum Erstellen von Dialog:
%Vor%
Tags und Links android android-alertdialog customdialog