Android Studio теперь поддерживает векторные активы на 21+ и будет генерировать png для более низких версий во время компиляции. У меня есть векторный актив (из значков материалов), который я хочу изменить цвет заливки. Это работает на 21+, но сгенерированные pngs не меняют цвет. Есть ли способ сделать это?
<vector android:height="48dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/primary" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
android:tint
должно быть послеandroid:src
drawableLeft
вButton
?Ты можешь это сделать.
НО вы не можете использовать ссылки @color для цветов (..lame), иначе это будет работать только для L +
источник
Как сказано в других ответах, не редактируйте вектор, который можно нарисовать напрямую, вместо этого вы можете подкрасить код Java, например:
И для простоты я создал вспомогательный класс:
Для использования просто сделайте следующее:
Или:
источник
Чтобы изменить цвет векторного изображения, вы можете напрямую использовать Android: tint = "@ color / colorAccent"
Чтобы изменить цвет программно
источник
getColor(ResId, Theme)
это не так. Или вы можете использовать,ResourcesCompat.getColor(getResources(), R.color.primary, null);
если вам не безразлична тема ... или если ваш делегат контекста / политики является действием, вы можете сделатьgetTheme()
для этого последнего параметра.В настоящее время рабочим решением является android: fillColor = "# FFFFFF"
У меня ничего не получалось, кроме жесткого кодирования в векторе
Тем не менее, fillcolor и оттенок могут работать скоро. Пожалуйста, смотрите это обсуждение для получения дополнительной информации:
https://code.google.com/p/android/issues/detail?id=186431
Кроме того, в кэш можно добавить цвета, так что удаление приложения для всех пользователей может помочь.
источник
Студия Android теперь поддерживает векторы pre-lollipop. Нет преобразования PNG. Вы все еще можете изменить цвет заливки, и он будет работать.
В вашем ImageView, используйте
В вашем файле Gradle,
источник
Обновление:
AppCompat
поддержкаВ других ответах, подозревающих, что
android:tint
будет работать только на 21+ устройствах, AppCompat ( v23.2.0 и выше ) теперь обеспечивает обратно совместимую обработку атрибута tint.Таким образом, курс действий будет использовать
AppCompatImageView
иapp:srcCompat
(в пространстве имен AppCompat) вместоandroid:src
(пространство имен Android).Вот пример (AndroidX: это androidx.appcompat.widget.AppCompatImageView ;)):
И не забудьте включить поддержку рисования векторов в Gradle:
источник
AppCompatImageView
находится подandroidx.appcompat.widget.AppCompatImageView
Добавьте эту библиотеку в Gradle, чтобы включить рисование векторных цветов на старых устройствах Android.
и повторно синхронизировать Gradle. Я думаю, что это решит проблему.
источник
Если векторы не показывают индивидуально установленные цвета с использованием fillColor, тогда им может быть задан параметр виджета по умолчанию.
Попробуйте добавить файл
app:itemIconTint="@color/lime"
activity_main.xml, чтобы установить тип цвета по умолчанию для значков виджета.VectorDrawable @ developers.android
источник
если вы ищете поддержку старой версии pre lolipop
использовать тот же код XML с некоторыми изменениями
вместо нормального
ImageView --> AppCompatImageView
вместо того
android:src --> app:srcCompat
вот пример
не забудьте обновить свой gradle как @ Sayooj Valsan упоминание
Замечание Любому используемому вектору никогда не дают ссылку на ваш цвет, как этот,
android:fillColor="@color/primary"
дает его шестнадцатеричное значение.источник
@color
дляfillcolor
?Для тех, кто не использует
ImageView
, следующее работает для меня на равнинеView
(и, следовательно, поведение должно повторяться на любом виде)источник