EditText Drawable Tint不可能?

时间:2015-10-22 02:54:21

标签: android android-edittext

我使用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和设计支持库,但仍然找不到任何代码。

5 个答案:

答案 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 setTintsetTintMode。所有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