Рисованное тонирование для api <21
Можно ли сделать точечную тонировку для api < 21?
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_calendar"
android:tint="@color/primary" />
Работает отлично, но только для устройств с API21. Какое-либо обходное решение для более низких api-устройств или поддержки AppCompat? Не могу найти ничего.
Ответы
Ответ 1
Используйте AppCompatImageView
так:
<android.support.v7.widget.AppCompatImageView
android:id="@+id/my_appcompat_imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/my_image"
android:tint="#636363"
/>
Убедитесь, что в вашем приложении build.gradle
установлено последнее appcompat-v7
.
Пример: compile 'com.android.support:appcompat-v7:25.0.0'
в вашем приложении build.gradle
.
Ответ 2
Вы можете добиться этого с помощью исходного кода.
Ранее tinting не поддерживался 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));
Ответ 3
Не могли бы вы просто использовать 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"
/>
Ответ 4
Аналогичный вопрос был задан раньше: fooobar.com/questions/108890/...
Android Drawable Tinting поддерживается только в Android 5.0+ (API 21+). (Он говорит "At the moment this is limited to coloring the action bar and some widgets.
" ).
Тематизация
...
Когда вы устанавливаете эти атрибуты, AppCompat автоматически распространяется их значения для атрибутов структуры API 21 +.. автоматически окрашивает строку состояния и запись задачи "Рецензии".
На старых платформах AppCompat эмулирует цветную тематику, где возможное. На данный момент это ограничивается окраской панели действий и некоторые виджеты.
и
Подчеркивание виджета
При работе на устройствах с Android 5.0 все виджеты тонируются с использованием атрибутов цветовой темы, которые мы только что говорили about. Есть две основные функции, которые позволяют это на Lollipop: масштабируемое тонирование и ссылки на атрибуты темы (формы? attr/foo) в drawables.
AppCompat обеспечивает аналогичное поведение в более ранних версиях Android для подмножества виджета пользовательского интерфейса:
Все, что предусмотрено панелью инструментов AppCompats (режимы действия и т.д.), EditText Spinner CheckBox RadioButton Switch (используйте новый android.support.v7.widget.SwitchCompat) CheckedTextView Вам не нужно делать что-либо особенное, чтобы сделать эту работу, просто используйте эти элементы управления в ваши макеты, как обычно, и AppCompat сделают все остальное (с некоторыми предостережения; см. раздел "Вопросы и ответы" ниже).
Источники:
http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html
https://chris.banes.me/2014/10/17/appcompat-v21/
Ответ 5
Теперь AppCompatImageView, AppCompatButton заменит ImageView, Button, чтобы поддерживать оттенок на устройствах с более низким API. Проверьте ссылку для получения более подробной информации.
AppCompatImageView, AppCompatButton
Ответ 6
Для тонировки изображений вы можете использовать imageView.setColorFilter(int color)
. Это работает с API 8 и работает для тонирования моего черного изображения до цвета, который я хотел.
Это может заменить setImageTintList()
, но следует использовать только android:tint
.
Ответ 7
Использовать это имя
XMLNS: приложение = "http://schemas.android.com/apk/res-auto"
и после того, как вы сможете заменить каждый андроид: оттенок с помощью приложения: оттенок. Это исправить проблему для меня.
Ответ 8
Я немного опоздал, но здесь, как это сделать.
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)
}
Ответ 9
Это будет работать так, как вы хотите, и должно работать на всех версиях библиотеки поддержки 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
}
Ответ 10
Если кто-то хочет создать новый drawable (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>