2015-10-22 3 views
5

Я использую оттенок для значков для всего своего приложения.EditText Drawable 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. Невозможно ли выровнять выделение?

Примечание:

Я использую AppCompat и библиотека поддержки проектирования, но до сих пор не может найти какой-либо код.

ответ

23

Используйте wrap, setTint, setTintMode методы из DrawableCompat class, чтобы установить оттенок для программно запрограммированного

Drawable drawable = getyourdrawablehere; 
drawable = DrawableCompat.wrap(drawable); 
DrawableCompat.setTint(drawable, Color.GREEN); 
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER); 

И после сета вытяжке для EditText:

editText.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); 
+4

В моем случае он работал без использования TintMode. –

+0

Изменить 'PorterDuff.Mode' на' SRC_IN' –

+0

не работает с векторными чертежами – Bolein95

7

Создать вытяжку с растровым тегом как этого

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

<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" /> 
+0

это недостаток – Sheychan

+0

Btw просто понял, что это не работает ICS :( – Rendy

+0

Это tintMode? – Sheychan

7

К сожалению, решение опубликовано mbelsky необходимы некоторые очень небольшие изменения. Для того, чтобы выровнять ваши рисунки в вашем EditText, вам необходимо использовать wrapsetTint и 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); 
2

Вы можете использовать

android:drawableTint="@color/yourcolor" 

Обратите внимание, что он работает только на Апи 23 или выше

+2

Надеюсь, что команда Google Android добавит совместимость для API 23-, чтобы избавить нас от написания большого количества кода, как показано выше !!! –

Смежные вопросы