我使用tint作为整个应用程序的图标。
我ImageView
中的示例:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_account_circle"
android:tint="@color/red_color"/>
我还使用EditText
中的一些图标作为其绘图:
<EditText
android:id="@+id/passwordInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_lock"
android:drawablePadding="@dimen/medium_margin_padding"
android:hint="@string/password_text"
android:inputType="textPassword" />
但是,我找不到任何可用于在EditText
中为drawable着色的代码。是不是可以为可绘制着色?
注意:
我使用appcompat和设计支持库,但仍然找不到任何代码。
答案 0 :(得分:33)
使用DrawableCompat class中的wrap, setTint, setTintMode
方法以编程方式为drawable设置色调
Drawable drawable = getyourdrawablehere;
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, Color.GREEN);
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
在为editText设置drawable之后:
editText.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
答案 1 :(得分:10)
使用像这样的位图标记创建一个drawable
drawable_with_tint.xml
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_lock"
android:tint="#fff">
</bitmap>
然后你可以在你的edittext中使用drawable
<EditText
android:id="@+id/passwordInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_drawable_with_tint"
android:drawablePadding="@dimen/medium_margin_padding"
android:hint="@string/password_text"
android:inputType="textPassword" />
答案 2 :(得分:10)
不幸的是,mbelsky发布的解决方案需要进行一些非常小的改动。为了在EditText中为您的drawable着色,您需要使用wrap
setTint
和setTintMode
。所有API的完整解决方案:
Drawable drawable = getResources().getDrawable(drawableID/mipmapID);
emailDrawable = DrawableCompat.wrap(emailDrawable);
DrawableCompat.setTint(emailDrawable,getResources().getColor(R.color.purple));
DrawableCompat.setTintMode(emailDrawable, PorterDuff.Mode.SRC_IN);
editText.setCompoundDrawablesWithIntrinsicBounds(drawable,null,null,null);
答案 3 :(得分:3)
您可以使用
android:drawableTint="@color/yourcolor"
请注意,它仅适用于Api 23或更高版本
答案 4 :(得分:0)
在我的情况下,接受的答案不适用于5.0设备,通过DrawableCompat
进行着色似乎在Button
和其他资源上有效,但在EditText
上无效。
经过数小时的努力,我在androidx.appcompat.widget.AppCompatEditText
的Android文档中发现了这句话:
一个EditText,它支持平台旧版本上的兼容功能,包括:
通过ViewCompat中的背景着色方法允许其背景的动态着色。
因此,以编程方式在API 21上为我工作的方法以及其余方法将是:
ViewCompat.setBackgroundTintList(myEditText, ColorStateList.valueOf(getResources().getColor(R.color.my_color)));
请参阅参考资料:AppCompatEditText