2016-04-22 8 views
4

Ich habe mehrere Probleme mit der neuen AppCompat 23.3.x und den Drawables. Zunächst einmal musste ich zurückgehen und entfernen:Wie tönst du einen Button mit appcompat 23.3.0 aus?

vectorDrawables.useSupportLibrary = true 

Da die AppCompat zurückgekehrt, dass so jetzt, mein App generiert wieder PNG. Ok, aber ich habe einen Button (den DrawableTop) auf eine Weise getönt, die komplett aufgehört hat zu arbeiten (für Geräte vor M).

Dies ist die Methode, die ich wurde mit:

private void toggleState(boolean checked) { 
    Drawable[] drawables = getCompoundDrawables(); 
    Drawable wrapDrawable = DrawableCompat.wrap(drawables[1]); 
    if (checked) { 
     DrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), 
       R.color.colorPrimary)); 
     setTextColor(ContextCompat.getColor(getContext(), R.color.colorPrimary)); 
    } else { 
     DrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), 
       R.color.icon_light_enabled)); 
     setTextColor(ContextCompat.getColor(getContext(), R.color.text_primary_light)); 
    } 
} 

Die Sache ist, ich eine benutzerdefinierte Button-Klasse, die überprüfbar ist, wenn geprüft, drawableTop und Text eine andere Farbe haben, dass, wenn es nicht aktiviert ist.

Dies funktioniert (mit appcompat 23.2.0), aber jetzt ist es nicht (unter Android M). Glauben Sie mir oder nicht, aber wenn Sie dies tun, ist das Symbol bei setTint überhaupt nicht mehr sichtbar.

, damit es funktioniert, ich habe wie zu tun folgt:

DrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(),R.color.colorPrimary)); 
setCompoundDrawablesWithIntrinsicBounds(null, wrapDrawable, null, null); 

Also jedes Mal wenn ich sie tönen, ich habe wieder setCompoundDrawablesWithIntrinsicBounds zu nennen. Dadurch funktioniert alles wieder. Ich bin jedoch ein wenig besorgt über die Leistung der Einstellung der Zeichen jederzeit. Grundsätzlich frage ich mich, ob es einen besseren Weg oder etwas gibt, was mir fehlt.

Ich weiß, dass ein ButtonsetCompoundDrawableTintList hat, die wunderbar sein würde, aber seine minimale API ist Level 23.

+0

Was hat es mit 'VectorDrawble' zu ​​tun? – pskink

+1

Ich glaube dir - es ist NICHT sichtbar. Das Ersetzen des Zeichnbaren durch den Getönten hat den Zweck erfüllt. Danke für 'ContextCompat.getColor (getContext(), R.color.colorPrimary) '! –

Antwort

5

nicht genug Ruf um einen Kommentar zu machen, aber ich lief nur in diese auch Thema. Wirklich scheiße und gut, dass ich es heute statt nach der Veröffentlichung gefangen habe.

Noch seltsamer ist dies nur auf Lollipop, normales Verhalten wird auf Kitkat und API 23+ gesehen.