Android - AlertDialog-Styling

8

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%     
suresh cheemalamudi 08.02.2013, 10:23
quelle

4 Antworten

18

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

zu verwenden)

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:

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

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

    
David Wasser 08.02.2013, 10:41
quelle
2

Übrigens ist es eine späte Antwort, vielleicht wird es für jemanden nützlich sein. um Custom AlertDialog zu erstellen und die gleichen Schaltflächen wie der Standard-AlertDialog zu haben. Befolgen Sie die einfache Methode unten

%Vor%     
Kirk 16.12.2013 12:11
quelle
1

Versuchen Sie, ein custom layout für das Dialogfeld zu erstellen, und geben Sie dieses layout mit Hilfe von

an Ihren Warnungsdialog an %Vor%

Sie können dieses Beispiel für einen benutzerdefinierten Dialog sehen.

    
Chintan Rathod 08.02.2013 10:44
quelle
0

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%

    
Feng Dai 06.10.2014 03:09
quelle