Мешочки тонировки для API


можно ли сделать рисованную тонировку для api

<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_calendar"
    android:tint="@color/primary" />

работает просто отлично, но только для устройств с API21. Любой обходной путь для более низких устройств api или поддержки AppCompat? Ничего не могу найти.

7 68

7 ответов:

использовать 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"
    />

убедитесь, что у вас есть последний appcompat-v7 в вашем приложении build.gradle.

пример: compile 'com.android.support:appcompat-v7:25.0.0' в вашем приложении build.gradle.

вы можете достичь этого с помощью исходного кода. Ранее тонировка не поддерживалась 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));

не могли бы вы просто использовать 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"
    />

подобный вопрос был задан ранее здесь:https://stackoverflow.com/a/26533340/950427

android Drawable тонировка поддерживается только в Android 5.0+ (API 21+). (Он действительно говорит"At the moment this is limited to coloring the action bar and some widgets.").

Theming

...

когда вы устанавливаете эти атрибуты, AppCompat автоматически распространяется их значения для атрибутов фреймворка на API 21+. этот автоматически окрашивает строку состояния и Обзор (последние) запись задачи.

на старых платформах AppCompat эмулирует цветовую тематику, где вероятный. На данный момент это ограничивается раскраски и некоторые виджеты.

и

виджет тонировка

при запуске на устройствах с Android 5.0, все виджеты тонируются с помощью атрибутов цветовой темы, о которых мы только что говорили о. есть две основные особенности которые позволяют это на леденец: рисуемая тонировка и ссылки на атрибуты темы (формы ?attr / foo) в чертежах.

AppCompat обеспечивает аналогичное поведение на более ранних версиях Android для подмножества виджетов пользовательского интерфейса:

все, что предусмотрено панелью инструментов AppCompat (режимы действий и т. д) EditText Spinner флажок RadioButton переключатель (использовать новый андроид.поддержка.v7.штучка.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/

теперь AppCompatImageView, AppCompatButton заменит ImageView, кнопка для поддержки оттенка на устройствах с более низким API. Проверьте ссылку для получения более подробной информации AppCompatImageView, AppCompatButton

для тонировки изображений вы можете использовать imageView.setColorFilter(int color). Это работает с API 8 и работал для тонировки моего черного изображения в цвет, который я хотел. Это может заменить setImageTintList() но только с помощью android:tint также должны работать.

используйте это пространство имен
xmlns: app="http://schemas.android.com/apk/res-auto"

и после того, как вы можете заменить каждый android:оттенок с приложением:оттенок. Это исправить вопрос ко мне.