我们有什么方法可以在Drawable
使用中着色TextView
吗?DrawableTint
仅适用于API级别23及更高级别.
目前我正在使用a Vertical Linear Layout
来达到我的要求.
它看起来像,
Android工作室建议我使用Compound Drawble
它TextView
来实现这一目标.而且我能够实现它,但我找不到Tint
可绘制的方法.
kris larson.. 18
这样做的程序化方法是
Drawable[] drawables = textView.getCompoundDrawables(); if (drawables[0] != null) { // left drawable drawables[0].setColorFilter(color, Mode.MULTIPLY); }
这适用于所有API级别.
这是Marshmallow之前设备的最佳选择.
这样做的程序化方法是
Drawable[] drawables = textView.getCompoundDrawables(); if (drawables[0] != null) { // left drawable drawables[0].setColorFilter(color, Mode.MULTIPLY); }
这适用于所有API级别.
这是Marshmallow之前设备的最佳选择.
这个答案基于@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; }
从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
。