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 Button
setCompoundDrawableTintList
hat, die wunderbar sein würde, aber seine minimale API ist Level 23.
Was hat es mit 'VectorDrawble' zu tun? – pskink
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) '! –