Widget, das nicht auf Lollipop getönt ist

8

Ich verwende appcompat v21.0.3 für meine App. Ich habe alles so gemacht, wie es hier geschrieben ist: android-developers.blogspot .com / 2014/10 / appcompat-v21-Material-Design-for-Pre.html

Aber auf Lollipop (und auf älteren Geräten natürlich), sind einige Widget nicht mit meiner Akzentfarbe getönt. Zum Beispiel:

  • SwitchCompat ist getönt:

  • ListPreference ist NICHT getönt

  • ProgressDialog ist NICHT getönt

Hier ist mein Code:

build.gradle

%Vor%

AndroidManifest.xml

%Vor%

themes.xml

%Vor%

colors.xml

%Vor%

Hat jemand eine Idee?

UPDATE: Stand Juni 2015 funktioniert immer noch nicht, aber ich habe Ссылка verwendet. Funktioniert wirklich gut für Dialoge, einschließlich ListPreferences.

    
Stéphane 14.01.2015, 09:23
quelle

6 Antworten

28

Folgen Sie den Anweisungen unten

Sofern nicht anders angegeben, gelten alle folgenden Tönungen für Lollipop und Pre-Lollipop mit AppCompat v21. Um die Unterstützungsversion dieser Attribute zu verwenden, entfernen Sie den android-Namespace. Zum Beispiel wird "android: colorControlNormal" zu "colorControlNormal". Diese Attribute werden an die entsprechenden Attribute im Android-Namespace für Geräte weitergegeben, auf denen Lollipop ausgeführt wird. Alle Ausnahmen werden durch das Hinzufügen des Präfixes "android:" angezeigt.

%Vor%

P.S. tönung funktioniert standardmäßig nur mit Whitelist-Symbolen (siehe TintManager source code). Zum Beispiel ist das Zurückpfeil-Symbol% ​​co_de% getönt, aber das Kopieren dieser exakten Datei und das Umbenennen führen dazu, dass das Symbol bei der Aufnahme eines zufälligen Bildes nicht getönt wird, und wenn es in "abc_ic_ab_back_mtrl_am_alpha" umbenannt wird, wird es getönt. Die Tönung kann in XML in Lollipop erfolgen, indem eine "abc_ic_ab_back_mtrl_am_alpha" xml-Datei in Zeichen erstellt und das <bitmap> -Attribut angewendet wird. Dieses Symbol kann sowohl in Lollipop als auch in Pre-Lollipop verwendet werden, wird jedoch nur in Lollipop getönt. Das Tönen von Aktionssymbolen kann auch programmgesteuert mit einem "android:tint" erfolgen.

Quelle

    
quelle
12

Sie sollten in der Regel eine eigene Fortschrittsleiste anstelle eines Dialogs verwenden und dann eine getönte Version erstellen, die sowohl auf L als auch auf Vor-L funktioniert:

%Vor%

Wenn Sie wirklich die Farbe im Dialog ändern wollten, finden Sie die verschachtelte Fortschrittsleiste wahrscheinlich in dialog.findViewById(android.R.id.progess)

    
Mark Hetherington 23.01.2015 05:22
quelle
5

Um die Farbe des Fortschrittsdialogs zu ändern, habe ich die folgende Problemumgehung verwendet: Ich habe AppCompat-Alarmdialog-Basisstil erstellt

%Vor%

Und dann wenden Sie dieses Thema auf Fortschrittsdialog:

%Vor%     
Andrey T 10.07.2015 09:08
quelle
3

Es beantwortet nur einen Teil Ihrer Frage, aber der Fortschrittsbalkenstil aus der appcompat-Bibliothek nimmt die Akzentfarbe auf Lollipop noch nicht auf, auch nicht außerhalb von ProgressDialog .

Sie müssen es selbst einrichten, zum Beispiel mit diesem Stil:

%Vor%

, die Sie dann auf eine ProgressBar oder eine ContentLoadingProgressBar anwenden können. (Beachten Sie, dass ein Elternelement, in dem der Fortschrittsbalken aufgebläht ist, offensichtlich das Thema anwenden muss, das das Attribut colorAccent definiert; andernfalls verwenden Sie eine direkte Farbressource)

Wenn Sie den Fortschrittsbalken in ein Dialogfeld integrieren möchten, da ich glaube nicht, dass ProgressDialog die Anpassung seines Fortschrittsbalkens über den Typ hinaus unterstützt, müssen Sie möglicherweise ein AlertDialog mit einrichten ein Fortschrittsbalken, der das oben genannte Thema anwendet, oder einfach mit einem benutzerdefinierten Dialogfeld gehen, denke ich Sie können auf diese Antwort um die oben genannten Fortschrittsbalkenattribute auf einen Dialog anzuwenden.

    
desseim 13.02.2015 15:53
quelle
1

Versuchen Sie das Attribut colorControlActivated :

themes.xml

%Vor%

    
Feng Dai 14.01.2015 09:39
quelle
0

Soweit ich weiß, wird alles in einem Dialog (noch) nicht automatisch in Lollipop eingefärbt. Checkout Material-Dialoge , eine Bibliothek, die das automatisch für Sie erledigt (unterstützt aber nur API 14 +).

>

Beantworte die Antworten auf eine ähnliche Frage: Android v21 Theme.Appcompat Farbakzent wird ignoriert, kein Auffüllen von Dialogen

    
hidro 23.01.2015 04:26
quelle