EditText Drawable Tint不可能?

Ren*_*ndy 12 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"/>
Run Code Online (Sandbox Code Playgroud)

我还使用了一些图标EditText作为drawable:

<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" />
Run Code Online (Sandbox Code Playgroud)

但是,我找不到任何可用于对drawable进行着色的代码EditText.是不是可以为可绘制着色?

注意:

我使用appcompat和设计支持库,但仍然找不到任何代码.

mbe*_*sky 35

使用DrawableCompat类中wrap, setTint, setTintMode方法以编程方式为drawable设置tint

Drawable drawable = getyourdrawablehere;
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, Color.GREEN);
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
Run Code Online (Sandbox Code Playgroud)

在为editText设置drawable之后:

editText.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,它没有使用TintMode. (4认同)
  • 将 `PorterDuff.Mode` 更改为 `SRC_IN` (3认同)

She*_*han 13

使用像这样的位图标记创建一个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>
Run Code Online (Sandbox Code Playgroud)

然后你可以在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" />
Run Code Online (Sandbox Code Playgroud)


小智 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);
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用

android:drawableTint="@color/yourcolor"
Run Code Online (Sandbox Code Playgroud)

请注意,它仅适用于Api 23或更高版本

  • 希望Google Android团队向其添加对API 23-的兼容性,以使我们摆脱编写大量如上所示的代码!!! (3认同)