Textfarbe / Aussehen in AlertDialog korrigieren

8

Ich kämpfe ziemlich lange mit diesem Problem herum. Ich suchte nach Lösungen und es gab tatsächlich einige Vorschläge für verwandte Probleme, aber nichts funktionierte wirklich richtig für mich. Nehmen wir an, ich möchte einen AlertDialog mit einer (langen) Nachricht, einem Kontrollkästchen und zwei Schaltflächen erstellen.

%Vor%

Dies funktioniert nicht , da das Kontrollkästchen nicht vollständig angezeigt wird, wenn die Dialognachricht zu lang wird. Außerdem wird es im Querformat komplett ausgeblendet.

Als nächstes versuchen Sie, das original dialog layout file (für mich befindet es sich unter android-sdk-linux_86 / plattformen / android-17 / data / res / layout / alert_dialog.xml) und versuche es kopiere den relevanten Teil, um einen eigenen "Klon" des inneren Dialoglayouts zu erstellen, einfach so:

dialog_checkbox.xml

%Vor%

Wir könnten versuchen, diese Ansicht unserem Dialog wie folgt hinzuzufügen:

%Vor%

Das funktioniert tatsächlich ganz gut. Fast. Wir werden kein Problem sehen, bis wir Theme.Light für unsere App verwenden. Aber sobald wir Theme.Light verwenden, werden die Farben des Dialogtextes schwarz und auf dunklem Hintergrund unlesbar. WARUM?!

  • Wir haben den ursprünglichen Android-Alarmdialog-XML-Layout-Quellcode geklont. Aber obwohl wir attr / textAppearanceMedium als Textstil verwenden, wird die Textfarbe unter Theme.Light trotzdem schwarz.
  • Wenn wir Theme.Light verwenden und einen "normalen" Dialog mit einer normalen Nachricht über setMessage erstellen, ist die Textfarbe weiß und lesbar.

Was ist los? Wie löst man das? Ich möchte die Textfarbe nicht programmgesteuert auf Weiß oder Schwarz festlegen, dies wird bei benutzerdefinierten Benutzerdesigns nicht gut aussehen. Irgendwelche Vorschläge?

    
flxapps 25.12.2012, 18:20
quelle

4 Antworten

19

Ich hatte das gleiche Problem und löste es, indem ich einen ContextThemeWrapper für mein gewünschtes Dialogthema erstellte und dieses beim Erstellen des AlertDialog Builders und beim Aufblasen der anzuhängenden Ansicht verwendete:

%Vor%

Der Style R.style.DialogBaseTheme ist in "/values/styles.xml" für Gingerbread und unten als:

definiert %Vor%

Dann ist es auch in "/values-v11/styles.xml" für Honeycomb und nach oben definiert, um das Holo-Thema zu verwenden:

%Vor%

Bei Gingerbread werden die TextViews meiner benutzerdefinierten Ansicht automatisch weiß und Honeycomb + automatisch für Holo Light schwarz gefärbt.

    
Mark 02.07.2013 19:05
quelle
1

Ich DENKEN Ich habe endlich herausgefunden, wie ich es lösen kann. Auf der Grundlage meines ursprünglichen Codes scheint dies mein Problem zu lösen:

%Vor%

Beachten Sie den KontextThemeWrapper. Dadurch wird das Dialogfelddesign dem überhöhten Layout zugewiesen. Ich hoffe, dies löst endlich dieses Problem für die Zukunft.

    
flxapps 25.12.2012 19:31
quelle
0

Nur in Textansicht fügen Sie ein Attribut hinzu:

%Vor%

und definieren Sie eine weiße Farbe innerhalb der Datei colors.xml, die sich im Ordner res / values ​​befindet

%Vor%

Oder Sie können direkt hinzufügen

android:textColor="#fffff" (obwohl nicht empfohlen. Eine andere Methode wird empfohlen.)

    
Android Killer 25.12.2012 18:28
quelle
0

Sie können einen benutzerdefinierten Stil mit einem Schatten anwenden, um Ihren Text unabhängig von der Textfarbe sichtbar zu machen:

%Vor%

Allerdings Wenn es für Sie nicht sichtbar genug ist, können Sie einen inneren Schatten anwenden, aber Android hat leider keine Eigenschaft dafür, also müssen Sie etwas wie MagicTextView (erwähnt von ABentSpoon ) Frage: Gibt es einen Weg um einem TextView auf Android einen inneren Schatten hinzuzufügen? ).

    
Sergio Carneiro 25.12.2012 19:09
quelle