gpt4 book ai didi

android - 如何使用 appcompat 23.3.0 为按钮的可绘制对象着色?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:42:33 26 4
gpt4 key购买 nike

我在使用新的 AppCompat 23.3.x 和可绘制对象时遇到了几个问题。首先,我必须返回并删除:

vectorDrawables.useSupportLibrary = true

因为 AppCompat 现在恢复了,所以我的应用程序再次生成 PNG。好的,但是,我正在以完全停止工作的方式为按钮(drawableTop)着色(对于 M 之前的设备)。

这是我使用的方法:

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));
}
}

问题是,我有一个可检查的自定义 Button 类,如果选中,drawableTop 和文本的颜色与未选中时的颜色不同。

这样做是可行的(使用 appcompat 23.2.0),但现在不行了(低于 Android M)。信不信由你,但是这样做,当它点击 setTint 时,图标将不再可见。

要使其正常工作,我必须执行以下操作:

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

所以每次我给它们着色时,我都必须再次调用 setCompoundDrawablesWithIntrinsicBounds。这样做可以使一切恢复正常。但是,我有点担心每次设置可绘制对象的性能。基本上,我想知道是否有更好的方法或我缺少的东西。

我知道一个 ButtonsetCompoundDrawableTintList 这会很棒,但它的最低 API 是级别 23。

最佳答案

没有足够的声誉来发表评论,但我也遇到了这个问题。真的很糟糕,还好我是今天抓到的,而不是在发布后抓到的。

/**
* Tinting drawables on Kitkat with DrawableCompat
* requires wrapping the drawable with {@link DrawableCompat#wrap(Drawable)} prior to tinting it
* @param view The view containing the drawable to tint
* @param tintColor The color to tint it.
*/
public static void tintViewBackground(View view, int tintColor) {
Drawable wrapDrawable = DrawableCompat.wrap(view.getBackground());
DrawableCompat.setTint(wrapDrawable, tintColor);
view.setBackground(wrapDrawable);
}

/**
* Tinting drawables on Kitkat with DrawableCompat
* requires wrapping the drawable with {@link DrawableCompat#wrap(Drawable)} prior to tinting it
* @param drawable The drawable to tint
* @param tintColor The color to tint it.
*/
public static void tintDrawable(Drawable drawable, int tintColor) {
Drawable wrapDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(wrapDrawable, tintColor);
}

更奇怪的是,这只发生在 Lollipop 上,正常行为出现在 Kitkat 和 API 23+ 上。

关于android - 如何使用 appcompat 23.3.0 为按钮的可绘制对象着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36799776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com