Android 5.0 Lollipop: setColorFilter "leckt" auf andere Tasten

8

Ich verwende setColorFilter , um den Farbfilter von EINEM meiner Taste zu setzen. Dies funktioniert bis zum Android 5.0 Lollipop Update perfekt. Nun scheint der Farbfilter auf meine anderen Schaltflächen zu treffen, selbst wenn ich die Aktivität schließe und erneut öffne (sie wird zurückgesetzt, wenn ich die App schließe und erneut öffne).

Meine styles.xml (v21): (wie alt, außer hier ist der Elternteil Material, bevor es Holo war)

%Vor%

Meine styles.xml (für alle Versionen):

%Vor%

Meine Schaltfläche:

%Vor%

Mein Code:

%Vor%

Die Farbe:

%Vor%

Das Ergebnis:

Ich öffne die App, dann werden die Spielaktivitäten und alle Buttons korrekt angezeigt. Ich drücke den Knopf, um den Farbfilter einzustellen, gehe zurück zum Hauptmenü und öffne die Spielaktivität und nun sind alle Knöpfe grün.

Irgendwelche Ideen?

    
Johis 19.11.2014, 11:32
quelle

3 Antworten

1

OP hier. Vielen Dank für Ihre Vorschläge. Mit dem folgenden Code wurde das Problem behoben.

Einstellen des Filters

%Vor%

Die anderen Tasten wurden nicht grün.

Löschen des Filters

Was als nächstes passierte, war, dass Android (teilweise) meinen Aufruf ignorierte, den Farbfilter zu löschen (was später im Code passiert). "Teilweise", weil es grün war, aber wenn ich es drückte, wurde es gelb (das ist btn_default Verhalten im Gegensatz zu dunkelgrün mit dem Filter). Um dies zu beheben, musste ich meine Funktionsaufrufreihenfolge wie folgt ändern:

%Vor%

HINWEIS: Dies hat jedoch das Verhalten der Schaltfläche umgekehrt. Wenn ich auf die Taste drücke (und halte), scheint es immer noch das grüne Farbfilterverhalten zu haben und wird dunkelgrün. Wenn ich es loslasse, wird es gemäß btn_default wieder grau. Irgendwelche Vorschläge dazu?

Ich hoffe, das hilft irgendwie jemand anderem mit diesem seltsamen Problem, das für mich nur auf Android 5.0 Lollipop API Level 21 vorkam. (Ich habe API 8, 9, 12, 13, 16, 17, 18 und 19 getestet wo dieses Problem nicht auftrat.Auch scheint es nicht ART mit seiner AOT-Kompilierung zu sein, wie ich erwartet hatte, da die Aktivierung von ART auf einem Android 4.4.4-Gerät dieses Problem nicht verursacht hat. Seltsamerweise funktionierte auch mutate() nicht wie ich es erwartet hätte.

    
Johis 19.11.2014, 21:44
quelle
19

Das Problem besteht darin, dass der Hintergrund Drawable in vielen Ansichten wiederverwendet wird. Um sicherzustellen, dass% code% nicht für mehrere Ansichten verwendet wird, sollten Sie die Methode Drawable verwenden.

Siehe: mutiere ()

Beispielcode:

%Vor%     
Rolf ツ 19.11.2014 11:43
quelle
1

Die Instanz des Zeichenobjekts wird auf alle Ihre Schaltflächen verteilt. Wenn Sie also einen Farbfilter festlegen, werden alle Änderungen geändert (Sie sehen die Änderungen nicht sofort, da die Schaltflächen nicht sofort ungültig werden).

Versuchen Sie, den Zeichensatz manuell zu laden ( BitmapFactory.decodeResource(getResources(), android.R.drawable.btn_default, null) ) und legen Sie ihn als Hintergrund für die Schaltfläche fest.

    
Spotlight 19.11.2014 11:38
quelle