Подтвердить что ты не робот

Недопустимый вектор тегов

Я пытаюсь использовать векторные чертежи на предустановленных устройствах. Я сделал все как указано здесь, но я все равно получаю этот крах.

build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-beta6'
    }
}
apply plugin: 'com.android.application'

repositories {
    maven { url 'http://maven.android-forever.com' }
    jcenter()
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.test.app"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile "de.greenrobot:eventbus:2.4.0"
    compile 'de.greenrobot:greendao:2.1.0'
    compile "com.af:android-utility:1.0.0.9"
    compile project(':volleyplus')
    compile project (':libvlc')
}

triangle.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/triangle_v"/>
</selector>

triangle_v.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100">

<path
    android:name="triangle"
    android:fillColor="#FF0000"
    android:pathData="m 50,0 l 50,100 -100,0 z"/>

</vector>

layout.xml

<ImageView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@drawable/triangle"/>

Я также пробовал app:srcCompat, и в этом случае drawable просто не отображается.

4b9b3361

Ответ 1

Проблема заключалась в том, что моя активность не распространялась AppCompatActivity, а была регулярной Activity.

Это не указано ни в одной документации/примере для векторных векторных ссылок

Ответ 2

Я столкнулся с аналогичной проблемой, и полезен собственный ответ @pedja. В более общем плане, как упоминалось в статье Chris Banes, посвященной векторной совместимости, библиотека поддержки работает, введя ее версию ImageView поверх системы на пре-L через некоторые крючки. Это неявно требует использования классов классов AppCompat, таких как AppCompatActivity.

В моем случае векторный переносимый используется в автономном тостеподобном представлении без связанного действия с использованием контекста приложения. Я закончил использование AppCompatImageView в определении макета xml напрямую, то есть что-то вроде

<android.support.v7.widget.AppCompatImageView
             android:id="@+id/some_id"
             android:layout_width="24dp"
             android:layout_height="24dp"
             android:src="@drawable/selector_referencing_vector_drawable"/>

поэтому нет необходимости в механизме "крючка" магии. Как проверено, это также работает с классом Activity без использования AppCompatActivity. Все вышеизложенное было выполнено без обновления до 23.2.1, в котором была рассмотрена другая проблема.

Ответ 3

Этот код будет работать с вектором, если вы используете   vectorDrawables.useSupportLibrary = true

И измените android:src на app:srcCompat.

Например,

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/triangle"/>

to

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:srcCompat="@drawable/triangle"/>

Ответ 4

Также возникает проблема при загрузке векторов из селектора на устройствах с предварительным леллипом:

Используйте AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) в методе onCreate:

Устанавливает, могут ли векторные чертежи на старых платформах (< API 21) используется в ресурсах android.graphics.drawable.DrawableContainer. Когда включено, AppCompat может перехватить некоторую доходную инфляцию из рамки, которая обеспечивает неявную инфляцию векторных чертежей внутри android.graphics.drawable.DrawableContainer.

protected final void onCreate(Bundle savedInstanceState) {
         AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
         super.onCreate(savedInstanceState);
         ...

Ответ 5

Он работает с 23.2.0 или 23.4.0, а не 23.3.0. Серьезно Google!

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

Ссылка: https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.waicp19gh

Ответ 6

Вам также необходимо включить новую библиотеку поддержки векторов:

compile 'com.android.support:support-vector-drawable:23.2.0'

Ответ 7

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

<TextView .... android:drawableLeft="some_vectore_drawable" />

Я не мог найти, как это решить, поэтому я удалил эту строку из кода xml и поместил ее в свой код Java таким образом

Drawable somevectordrable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.somevectordrawable);
mytextview.setCompoundDrawableWithIntrinsicBounds(somevectordrable, null, null, null);

Уточнение кода,

  • Получить вектор, который можно извлечь из папки drawables, используя AppCompatDrawableManager

  • Настройте выделение, которое мы только что получили, как левое рисование в нашем текстовом виде

Ответ 9

Это ошибка поддержки v4, appcompat-v7 library v23.2.0, которая появляется в API 19. @tim предоставляет ссылку на эту проблему.

Вы можете перейти на новую версию библиотеки 23.2.1, и теперь исправлена ​​ошибка.

Ответ 10

Если вы видите, что используете <android.support.v7.widget.AppCompatImageView при загрузке векторного чертежа, лучше было бы расширить AppCompatActivity вместо Activity и вернуться к использованию обычного <ImageView...app:srcCompat="@drawable/...