#android #android-studio #android-vectordrawable
#Android #android-studio #android-векторное отображение
Вопрос:
КАК 4.0.1
Используйте app:drawableEndCompat instead of android:drawableEnd
предупреждение для API 21 и выше
<TextView
android:id="@ id/tvCheckStock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_pin_drop
android:gravity="center_vertical"/>
ic_pin_drop — это SVG (векторное изображение), созданное с использованием Android Studio File | New | Vector Asset | Configure Vector Assert
В моем Build.gradle
файле у меня есть следующая конфигурация:
minSdkVersion 21
targetSdkVersion 29
vectorDrawables.useSupportLibrary true
Поскольку min — это API 21, который является Lollipop, я подумал, что векторные чертежи поддерживаются из коробки, и мы можем использовать DrawableEnd, DrawableStart и т.д. Без совместимых версий?
Я думал, что совместимые версии были для уровня API до 21. Kitkat и ниже. И поскольку я не нацелен на этот минимум, я не уверен, почему я получаю это предупреждение.
Это приведет к тому, что на этих устройствах будет меньше 21, если не используется версия compat.
Большое спасибо за любые предложения.
Ответ №1:
Основной мотив этого предупреждения — сделать ваши VectorDrawables одинаковыми на всех устройствах, сделав их обратно совместимыми. Используя «Compat», вы гарантируете, что использование вашего векторного ресурса не приведет к сбою вашего приложения для устройств ниже API 21 (Lollipop). Короче говоря, использование drawableEndCompat
позволило бы любому использовать те же функции drawableEnd
в более старых API (<21). Теперь вы, вероятно, думаете, что мне следует выбрать: если вы используете drawableEndCompat
, это будет работать так, как вы ожидаете, на каждом устройстве. Устройства с API более 21 будут внутренне разворачивать их как обычно drawableEnd
, насколько я знаю. Если вы решите использовать drawableEnd
, оно будет работать только для API 21 и выше.
Если вы считаете, что мне не нужна поддержка совместимости: вы можете увеличить минимальный пакет SDK вашего приложения с текущего значения по крайней мере до 21. Затем вы можете использовать ключевое слово drawableEnd
мирно, без каких-либо предупреждений. Кроме того, вы можете создать другой файл макета для разных API, в соответствии с которым в файле макета для ниже API 21 используйте drawableEndCompat
, а для API 21 и выше используйте drawableEnd
. На мой взгляд, вы также можете проверить, можете ли вы использовать оба атрибута в одном месте. Я чувствую, что они также могут работать вместе.
Если вы не поддерживаете устройства ниже API 21, проблем нет: у вас не должно быть проблем / предупреждений. Кроме того, я должен сказать вам еще одну вещь — Android Studio иногда выдает предупреждения или ошибки; даже если вы правы. В этом случае, если вы считаете, что были правы, вам следует попробовать отменить / перезапустить опцию после нажатия опции File в строке меню. Я бы также посоветовал попробовать перезапустить вашу систему всем, кто использует system длительное время или всегда держит ее в спящем режиме.
Итак, для TextView
вам следует использовать app:drawableEndCompat
(или start, top, bottom) вместо app:drawableEnd
Ответ №2:
Векторные чертежи поддерживаются с API 21, но со временем добавляются новые функции, даже для векторных чертежей. Возможно, было бы неплохо использовать AppCompat и не беспокоиться об этом.
Подкрашивать смесь рисунки на TextView
S был добавлен в API 23. Предложение подталкивает вас к варианту совместимости, в котором функция переносится обратно.
app:drawable*Compat
app:drawableTint
иapp:drawableTintMode
Если вы не используете составную тонировку для рисования, вас может устраивать версия атрибутов для платформы.
android:drawable*
android:drawableTint
иandroid:drawableTintMode
(добавлено в API 23)
Комментарии:
1. Хотя я не использую ни
drawableTint
илиdrawableTintMode
в своем TextView. Я все равно получу это предупреждение? Я могу понять, что предупреждение могло появиться, если бы я пытался использовать drawableTint на устройстве, которому было меньше 23.2. Извините за неясность, основная идея на самом деле такова: вы используете AppCompat, это подталкивает вас к атрибутам AppCompat, иначе вы можете получить неожиданное поведение. Аналогично
colorPrimary
vsandroid:colorPrimary
и так далее.