Android

How to use VectorDrawables in Android API lower than 21?

Как использовать VectorDrawables в Android API младше 21?

Я работаю над проектом для Android и я выбрал <vector> для отображения значка, потому что он адаптируемый и динамичный, однако я просто могу запустить это приложение на устройствах под управлением Android, которые имеют API 21 или выше. Мой вопрос в том, как я могу использовать <vector> на более низкой версии Android, т.е. API 14 или что-то вроде. Спасибо!

<!-- drawable/ic_android_debug_bridge.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="48dp"
android:width="48dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/primaryColorDark"
android:pathData="M15,9A1,1 0 0,1 14,8A1,1 0 0,1 15,7A1,1 0 0,1 16,8A1,1 `0 0,1 15,9M9,9A1,1 0 0,1 8,8A1,1 0 0,1 9,7A1,1 0 0,1 10,8A1,1 0 0,1 9,9M16.12,4.37L18.22,2.27L17.4,1.44L15.09,3.75C14.16,3.28 13.11,3 12,3C10.88,3 9.84,3.28 8.91,3.75L6.6,1.44L5.78,2.27L7.88,4.37C6.14,5.64 5,7.68 5,10V11H19V10C19,7.68 17.86,5.64 16.12,4.37M5,16C5,19.86 8.13,23 12,23A7,7 0 0,0 19,16V12H5V16Z" /></vector>
Переведено автоматически
Ответ 1

Благодаря библиотеке поддержки 23.2 была обеспечена настоящая поддержка векторных отрисовок вплоть до версии API 7. Рекомендуется отключить предыдущую версию поддержки, которая отображала PNG во время сборки, добавив

// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}

в build.gradle файл.

Реализация довольно проста. Просто используйте новый атрибут srcCompat в Drawables (в пространстве имен приложения!):

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" /> // <= this is new

Векторные изображения также поддерживаются в таких случаях, как свойство TextView drawableLeft.

Источник: анонс библиотеки

Тем не менее, я бы все равно порекомендовал что-то вроде библиотеки Iconics, AndroidSVG или другого решения для создания значков шрифтов или SVG для полной поддержки SVG-standand и векторных изображений.

Ответ 2

VectorDrawable поддерживаются до Lollipop через библиотеку поддержки, но способ их использования зависит от имеющейся у вас версии библиотеки поддержки. И это может работать не во всех случаях.

Я сделал эту диаграмму, чтобы помочь (действительна для библиотеки поддержки с 23.4.0 по -крайней мере - 25.1.0).

VectorDrawable cheatsheet

Ответ 3

Я нашел решение! Для тех, кто ищет решение с TextView и другими атрибутами пространства имен "Android". Прежде всего, это необходимо:

android {  
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}

И в классе приложения определите это:

    @Override
public void onCreate() {
super.onCreate();
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

Теперь вы можете использовать app:srcCompat="@drawable/ic_add" но если вы попытаетесь использовать android:background= или android:drawableLeft= это приведет к сбою приложения с исключением "Раздувания ошибки".

Мы можем создать обернутый drawable ic_add_wrapped.xml для этого вектора:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_add"/>
</layer-list>

И теперь это будет работать с любым свойством, таким как drawableLeft или background. Просто установите android:drawableLeft="@drawable/ic_add_wrapped.xml".
ВНИМАНИЕ! ЭТО ОБХОДНОЕ РЕШЕНИЕ. Таким образом, вы используете его на свой страх и риск.

Ответ 4

Векторные файлы для рисования теперь обратно совместимы, осталось только обновить версию gradle до 1.4.0-beta3 или выше и обновить IDE :


Мы также рады предложить обратную совместимость для ваших векторных ресурсов в Android Studio 1.4. Как только в вашем res / drawable появится векторное изображение, плагин Gradle автоматически сгенерирует растровые PNG-изображения для API 20-го уровня и ниже во время сборки. Это означает, что вам нужно только обновлять и поддерживать свой векторный ресурс для вашего проекта приложения, а Android Studio может позаботиться о процессе преобразования изображений.


http://android-developers.blogspot.com.uy/2015/09/android-studio-14.html

2023-06-12 08:38 java android