Что нового в Drawable Tinting в Android L Developer Preview по сравнению с предыдущей версией?

Я работаю над новым предварительным просмотром Android L, и теперь я имею в виду концепцию тонирования на drawable.

Я хочу знать, есть ли что-то новое относительно растягивающейся тонировки в Android L Developer Preview.

Я прочитал эту документацию, в которой говорится:

Представление Android L Developer Preview позволяет вам определять растровые изображения или девять патчей в качестве альфа-масок и оттенять их с помощью цветового ресурса или атрибута темы, который разрешает цветовой ресурс (например ?android:attr/colorPrimary ). Вы можете создавать эти активы только один раз и автоматически их сортировать в соответствии с вашей темой.

Но я не понял, как он отличается от предыдущей версии. Я знаю, как использовать ColorFilter или PorterDuffColorFilter чтобы применить оттенок на изображении. Любая помощь по этому поводу будет оценена по достоинству.

Solutions Collecting From Web of "Что нового в Drawable Tinting в Android L Developer Preview по сравнению с предыдущей версией?"

Начиная с L, вы можете указать оттенки в XML. Они могут ссылаться на атрибуты темы (как показано), списки состояния цвета, цветные ресурсы или явные шестнадцатеричные цветовые коды. По умолчанию режим оттенков – SRC_IN, но его можно установить на что-то еще, используя атрибут android: tintMode.

 <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/my_icon" android:tint="?android:attr/colorControlNormal" /> 

По умолчанию все элементы управления используются: android: attr / colorControlNormal для их нормального состояния (например, флажок снят) и? Android: attr / colorControlActivated (который по умолчанию привязан к? Android: attr / colorAccent) для их активированного состояния (например, проверенный ).

Вы можете использовать эти атрибуты в своих собственных приложениях, чтобы наследовать цвета рамки по умолчанию, или вы можете переопределить их для изменения цветов по умолчанию или активированного управления. Вы также можете ссылаться на атрибуты, специфичные для вашего приложения (как показано).

 <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/my_icon" android:tint="?attr/myThemeAttribute" /> 

С новой библиотекой поддержки Android 22.1 теперь больше поддержки тонирования возможно!

Библиотека поддержки V4 служит базой большей части библиотеки поддержки Android и содержит многие классы, направленные на упрощение обратной совместимости.

Теперь DrawableCompat привносит верный оттенок обратно в API 4: просто оберните Drawable через DrawableCompat.wrap (Drawable) и setTint (), setTintList () и setTintMode (), просто выполните: нет необходимости создавать и поддерживать отдельные чертежи только для поддержки нескольких цвета!

Информация от Chris Banes:

Жесткая тонировка. Точные методы тонирования, добавленные в Lollipop, очень полезны для того, чтобы позволить вам динамически оттенять активы. AppCompat имеет свою собственную реализацию в библиотеке поддержки v21, и теперь мы извлекли ее в DrawableCompat в поддержку-v4 для всех пользователей. Важно знать, как это работает.

 Drawable drawable = ...; // Wrap the drawable so that future tinting calls work // on pre-v21 devices. Always use the returned drawable. drawable = DrawableCompat.wrap(drawable); // We can now set a tint DrawableCompat.setTint(drawable, Color.RED); // ...or a tint list DrawableCompat.setTintList(drawable, myColorStateList); // ...and a different tint mode DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER); 

Следует помнить, что после вызова DrawableCompat.wrap() вы не можете полагаться на результат того же типа, что и вы его даете. Вместо этого вы должны использовать DrawableCompat.unwrap() для извлечения исходного Drawable.

Внутренне мы теперь завершаем ваш Drawable в специальном «tint drawable», который автоматически обновит цветной фильтр Drawable с указанного оттенка. Это позволяет нам обрабатывать экземпляры ColorStateList.

Но мне интересно, как использовать его xml !! Есть опция, называемая

 <TintImageView android:layout_width="" android:layout_height="" android:src="" android:backgroundTint="@color/green"/> 

Но если я хочу изменить выталкиваемую левую | правую иконку для EditText TextView, то нет способа сделать то, что я чувствую!