2016-02-25 2 views
11

Приложение прекрасно работает при использовании плагина поддержки v23.1.1 и работает под Android 4.4.4 (API 19):Использование библиотеки поддержки android 23.2 в build.gradle crashes app (XmlPullParserException: XmlPullParserException: недопустимый вектор ярлыка)

compile 'com.android.support:appcompat-v7:23.1.1' 
compile 'com.android.support:design:23.1.1' 
compile 'com.android.support:support-v4:23.1.1' 

однако, когда я построить его с помощью newer version (23.2) из андроида библиотеки поддержки он выходит из строя:

XmlPullParserException: Binary XML file line #17: invalid drawable tag vector

Это происходит, когда приложение хочет, чтобы раздуть в диалог предупреждения с простым пользовательский вид. Пользовательский вид использует XML-файл, содержащий тег <shape> как один из его доступных.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > 

<solid 
    android:color="@android:color/white" > 
</solid> 

<corners 
    android:radius="5dp"> 
</corners> 

<stroke android:width="1dp" android:color="@color/AppColor" /> 

</shape> 

Хотя я не могу конкретно определить эту вытяжку на основе SVG в крешлогах, но я думаю, так как Google ввел поддержку VectorDrawables, это как-то конфликтует с моим приложением.

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

+0

как я подозревал, что старше библиотека поддержки создает .png файлы для '' , который работает вводимого коэффициента штрафа, но новый создает файлы 'svg', у которых есть тег' vector', который каким-то образом API 19 не может его обработать. Я даже попытался следовать их предложению, чтобы включить и выключить создание png 'vectorDrawables.useSupportLibrary = true', но это не помогло. – listboss

+0

Вы заметите, что этот новый атрибут существует только в версии 2.0 плагина Gradle. Если вы используете Gradle 1.5 вы будете использовать вместо // Gradle Plugin 1.5 андроид { defaultConfig { generatedDensities = [] } // Это обрабатывается для вас в 2.0+ Gradle Plugin aaptOptions { additionalParameters "--no-версия-векторы" }} http://android-developers.blogspot.ru/2016/02/android-support-library-232.html –

+0

Я на версии 2.0 – listboss

ответ

3

Оказалось, там было два отдельных вопроса:

  • я использую в моих файлах XML простой RadioButton. Исправлена ​​проблема с заменой на android.support.v7.widget.AppCompatRadioButton.
  • Во-вторых, поскольку в сообщении для блога было указано, что мне пришлось обернуть некоторые из чертежей в контейнер drawables, чтобы библиотека поддержки могла их использовать при выполнении векторного рисования. Например, в одной из моих пользовательских кнопок у меня был вектор, основанный на векторе, сохраненный в dialog_bg.xml, button_round_bg.xml и button_round_bg_2.xml.

    Чтобы исправить это, я должен был положить их в один из контейнеров (например, State list, Inset или LevelList).Эта оболочка была спасена к поданному под названием vector_wrapper.xlm:

<level-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:drawable="@drawable/dialog_bg" 
     android:maxLevel="1" 
     android:minLevel="1" /> 
    <item 
     android:drawable="@drawable/button_round_bg" 
     android:maxLevel="2" 
     android:minLevel="2" /> 
    <item 
     android:drawable="@drawable/button_round_bg_2" 
     android:maxLevel="3" 
     android:minLevel="3" /> 
</level-list> 

Теперь я хотел бы изменить фоновое изображение НАЗН.КНОПКИ, чтобы сказать

<customButton 
    android:background="@drawable/vector_wrapper" 
</customButton> 

Поскольку оболочка теперь имеет три вводимые коэффициент, я могу выбрать их в код Java в соответствии с моими потребностями:

customButton btnSave = (customButton) view.findViewById(R.id.btnSave); 
btnSave.getBackground().setLevel(3); 

Вам не нужно обертывать контейнер в, если ваш взгляд Image основанного вид как other answer по @themichaelscott предлагают, в этом случае просто изменить ГКЗ к app:srcCompat="@drawable/ic_add"

12

У меня возникла аналогичная проблема. Я получал ту же ошибку, потому что по-прежнему использовал атрибут android: src вместо приложения: srcCompat при настройке источника моего ImageView

Изменение этого атрибута везде, где вы ссылаетесь на переносимый вектор, поможет устранить проблему.

Старый:

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/ic_add" /> 

Новое:

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:srcCompat="@drawable/ic_add" /> 
+3

приложение: srcCompat может использоваться только для изображений, основанных на изображениях, я использую представления на основе Button, и в соответствии с сообщением в блоге он не поддерживает приложение: srcCompat – listboss

+0

, в котором «Атрибут отсутствует префикс пространства имен Android» – jyomin

+1

ответ от ответа @theMichaelScott также показал работу с FloatingActionButton, а также RobLabs

Смежные вопросы