Можно ли сделать рисованную тонировку для api <21?
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_calendar"
android:tint="@color/primary" />
Работает нормально, но только для устройств с API21. Есть ли обходной путь для устройств с более низким API или поддержки AppCompat? Ничего не могу найти.
AppCompatImageView
документов:This will automatically be used when you use ImageView in your layouts. You should only need to manually use this class when writing custom views.
developer.android.com/reference/android/support/v7/widget/… Таким образом, использование обычногоImageView
макета должно работать нормально.Вы можете добиться этого, используя исходный код. Раньше тонировка не поддерживалась
DrawableCompat
. Начиная с библиотеки поддержки 22.1, вы можете это сделать, но вам нужно сделать это следующим образом:Drawable normalDrawable = getResources().getDrawable(R.drawable.drawable_to_tint); Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable); DrawableCompat.setTint(wrapDrawable, getResources().getColor(R.color.colorPrimaryLight));
источник
ContextCompat.getColor()
вместоgetResources().getColor()
.Не могли бы вы просто использовать ImageView для отображения Drawable?
android:tint
отлично работает на более старых уровнях API.<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_calendar" android:tint="@color/primary" />
источник
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@drawable/ic_home_tinted" /> <item android:drawable="@drawable/ic_home" /> </selector>
Подобный вопрос задавался ранее здесь: https://stackoverflow.com/a/26533340/950427
Android Drawable Tinting поддерживается только в Android 5.0+ (API 21+). (Там действительно написано "
At the moment this is limited to coloring the action bar and some widgets.
").И
Источники:
http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
https://chris.banes.me/2014/10/17/appcompat-v21/
источник
ImageView
также теперь поддерживаетandroid:tint
через AppCompat, как в ответе @Jonik.AppCompatImageView
, что нетImageView
.Теперь AppCompatImageView, AppCompatButton заменит ImageView, Button для поддержки оттенка на устройствах с более низким API. Проверьте ссылку для получения дополнительной информации AppCompatImageView , AppCompatButton
источник
Для тонировки изображений можно использовать
imageView.setColorFilter(int color)
. Это работает с API 8 и сработало для окрашивания моего черного изображения в желаемый цвет. Это можно заменить,setImageTintList()
но простое использованиеandroid:tint
тоже должно работать.источник
Используйте это NameSpace
xmlns: app = "http://schemas.android.com/apk/res-auto"
а после вы можете заменить каждый android: tint на app: tint. Это решает проблему для меня.
источник
Я немного опоздал, но вот как это сделать.
val textInput = EditText(context) val drawable = ContextCompat.getDrawable(context, R.drawable.your_drawable) drawable?.let { myDrawable -> DrawableCompat.setTint(myDrawable, ContextCompat.getColor(context, R.color.your_color)) textInput.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, myDrawable, null) }
источник
Это будет работать так, как вы хотите, и должно работать во всех версиях библиотеки поддержки Android:
@JvmStatic fun getTintedDrawable(inputDrawable: Drawable, @ColorInt color: Int): Drawable { val wrapDrawable = DrawableCompat.wrap(inputDrawable.mutate()) DrawableCompat.setTint(wrapDrawable, color) DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN) return wrapDrawable }
источник
Если кто-то хочет создать новый чертеж (tin1, tint2 ..), попробуйте это
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/your_image" android:tint="@color/tint_color"> </bitmap>
источник