Подтвердить что ты не робот

Рисованное тонирование для 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? Не могу найти ничего.

4b9b3361

Ответ 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>