当前位置:  开发笔记 > Android > 正文

pre v23设备上的Android TextView DrawableTint

如何解决《prev23设备上的AndroidTextViewDrawableTint》经验,为你挑选了3个好方法。

我们有什么方法可以在Drawable使用中着色TextView吗?DrawableTint仅适用于API级别23及更高级别.

目前我正在使用a Vertical Linear Layout来达到我的要求.



  

  


它看起来像,在此输入图像描述

Android工作室建议我使用Compound DrawbleTextView来实现这一目标.而且我能够实现它,但我找不到Tint可绘制的方法.


kris larson.. 18

这样做的程序化方法是

       Drawable[] drawables = textView.getCompoundDrawables();
       if (drawables[0] != null) {  // left drawable
           drawables[0].setColorFilter(color, Mode.MULTIPLY);
       }

这适用于所有API级别.

这是Marshmallow之前设备的最佳选择.



1> kris larson..:

这样做的程序化方法是

       Drawable[] drawables = textView.getCompoundDrawables();
       if (drawables[0] != null) {  // left drawable
           drawables[0].setColorFilter(color, Mode.MULTIPLY);
       }

这适用于所有API级别.

这是Marshmallow之前设备的最佳选择.


如果你需要在另一个屏幕上使用不同的颜色或不同的视图状态,我相信你会想要在调用setColorFilter之前`mutate()`drawable.
供参考:左侧drawable [0],顶部drawable [1],右侧drawable [2],底部drawable [3]。谢谢你的作品。
PorterDuff.Mode.MULTIPLY对我不起作用.相反,PorterDuff.Mode.SRC_ATOP适合我.PorterDuff.Mode.MULTIPLY适合你吗?

2> Nishanth Sre..:

这个答案基于@kris larson的建议.

我使用以下方法,它在所有设备上都能正常工作.

setTintedCompoundDrawable一个自定义方法,它采用TextView你想要设置复合drawable的,一个drawable res id&和你选择颜色的res id.

private void setTintedCompoundDrawable(TextView textView, int drawableRes, int tintRes) {
    textView.setCompoundDrawablesWithIntrinsicBounds(
            null,  // Left
            Utils.tintDrawable(ContextCompat.getDrawable(getContext(), drawableRes),
                    ContextCompat.getColor(getContext(), tintRes)), // Top
            null, // Right
            null); //Bottom
    // if you need any space between the icon and text.
    textView.setCompoundDrawablePadding(12);
}

Tint tintDrawable方法如下:

public static Drawable tintDrawable(Drawable drawable, int tint) {
    drawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, tint);
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_ATOP);

    return drawable;
}



3> shinwan..:

从1.1.0-alpha03 [ ref ]版本开始,AndroidX appcompat库在TextView中支持着色。

向appcompat库添加依赖项

dependencies {
  implementation "androidx.appcompat:appcompat:1.1.0"
}

然后可以像这样从XML着色TextView中的drawable


不要忘记包括

xmlns:app="http://schemas.android.com/apk/res-auto"

并从扩展您的活动AppCompatActivity

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有