ich Blasen haben chatten, die ich in einigen Situationen tönen wollen:DrawableCompat setTint färbt alle neuen Drawables mit der gleichen ID
Drawable bubbleDrawable = ContextCompat.getDrawable(context, R.drawable.bg_chat_bubble);
if (tint) {
bubbleDrawable = DrawableCompat.wrap(bubbleDrawable);
DrawableCompat.setTint(bubbleDrawable, bubbleTint);
}
Das Problem ist, dass, wenn einmal, dass R.drawable.bg_chat_bubble
(es ist ein 9-Patch) war getönt dann alle Anrufe an ContextCompat.getDrawable(context, R.drawable.bg_chat_bubble)
gibt das getönte Bild anstelle des Originals zurück. Selbst wenn ich einen Chat schließe und einen völlig anderen Chat öffne, haben die Blasen dort den vorherigen Farbton. Nur das Löschen der App hilft dabei, die richtige Farbe wiederherzustellen. Bis zur ersten Tönung ...
Auch direkt setzen bubbleDrawable = ContextCompat.getDrawable(context, R.drawable.bg_chat_bubble)
innerhalb der Tönung Zweig nach dem Aufruf setTint
gibt ein getöntes Bild anstelle des Originals.
Ich versuchte auch getResources().getDrawable(R.drawable.bg_chat_bubble)
, aber das Ergebnis ist das gleiche. Wenn ich also einen Tönung für irgendeine zeichnerische Resuce verwenden möchte, muss ich immer eine Tönung für diese Ressource setzen, sonst bekomme ich unvorhersehbare Ergebnisse.
Dies geschieht auf Android 5.1 (wahrscheinlich auch andere) und mit appcompat-v7:23.2.+
und appcompat-v7:23.1.+
. Ist das ein bekannter Fehler oder mache ich etwas falsch?
versuchen Sie, das Zeichen vor der Einstellung der Tönung zu ändern – pskink
@pksink danke, das funktioniert perfekt. aber was ist mit Speicherverbrauch? mach deinen Kommentar eine Antwort und ich werde es akzeptieren. – shelll
es schafft nur einen neuen kleinen "gemeinsamen Zustand", also ist es keine große Sache – pskink