Фоновые чертежи вызывают исключение раздувания после предложенного изменения в файле build.gradle

В моем проекте Android Studio я получаю предупреждения о любых атрибутах app:srcCompat = "@drawable/..." в моих макетах XML:

<ImageView
    android:id = "@+id/leftNav"
    android:layout_width = "wrap_content"
    android:layout_height = "46dp"
    android:layout_marginStart = "16dp"
    android:layout_marginLeft = "16dp"
    android:layout_marginTop = "16dp"
    android:adjustViewBounds = "true"
    android:clickable = "true"
    android:focusable = "true"
    android:onClick = "leftNav_Click"
    android:scaleType = "fitCenter"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toTopOf = "parent"
    app:srcCompat = "@drawable/ic_chevron_left_black_24dp"<!--warning-->
    tools:ignore = "ContentDescription"
    />

Предупреждение:
Inspection info:To use VectorDrawableCompat, you need to make two modifications to your project. First, set android.defaultConfig.vectorDrawables.useSupportLibrary = true in your build.gradle file, and second, use app:srcCompat instead of android:src to refer to vector drawables.

Поэтому я предпринимаю следующие шаги, как указано в файле приложения build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.testappbehaviourchart"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        android.defaultConfig.vectorDrawables.useSupportLibrary = true //added to resolve VectorDrawableCompat issue
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha03'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.viewpager:viewpager:1.0.0'
    implementation "com.android.support:support-v4:28.0.0"
    implementation "com.android.support:support-compat:28.0.0"
    implementation 'com.google.android.material:material:1.0.0'

}

Это, кажется, подавляет предупреждения, однако теперь я получаю новое фатальное исключение во время выполнения при раздувании:

`E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.testappbehaviourchart, PID: 21284
    android.view.InflateException: Binary XML file line #165: Error inflating class <unknown>`

Я сузил это до любых атрибутов android:background = "@drawable/..." как показано здесь внутри TableRow внутри TableLayout:

<View
    android:id = "@+id/view_m1"
    android:layout_width = "match_parent"
    android:layout_height = "82dp"
    android:background = "@drawable/ic_simplebox"
    android:minWidth = "82dp"
    tools:layout_editor_absoluteX = "105dp"
    tools:layout_editor_absoluteY = "101dp"
    /> 

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

Примечания:

  • Я думаю, что мог бы просто добавить tools:ignore = "VectorDrawingCompat", чтобы игнорировать первое предупреждение, но я не уверен в последствиях, которые это повлечет.
  • Мне нужно сохранить minSdkVersion как 16.
  • Это @drawable/ic_simplebox XML:
<vector android:height = "24dp" android:viewportHeight = "100"
    android:viewportWidth = "100" android:width = "24dp" xmlns:android = "http://schemas.android.com/apk/res/android">
    <path android:fillColor = "#E0171C20" android:name = "Shape 1 copy" android:pathData = "m20 100v-5h60v5h-60z"/>
    <path android:fillColor = "#E0171C20" android:name = "Shape 1 copy 2" android:pathData = "m0 20h5v60h-5v-60z"/>
</vector>
  • Это @drawable/ic_chevron_left_black_24dp XML:
<vector android:height = "24dp" android:tint = "#667573"
    android:viewportHeight = "24.0" android:viewportWidth = "24.0"
    android:width = "24dp" xmlns:android = "http://schemas.android.com/apk/res/android">
    <path android:fillColor = "#FF000000" android:pathData = "M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z"/>
</vector>

Я так не думаю, это будет работать до версии леденца. Можете ли вы поделиться файлами для рисования.

Goutham 08.04.2019 19:56

Привет @Goutham, я добавил xml выше. Когда вы говорите «Я так не думаю», вы имеете в виду предупреждение или исключение?

n00dles 08.04.2019 20:08

Как вы упомянули, ваша минимальная версия SDK - 16, но приложение: srcCompat будет работать с библиотекой поддержки Android 23.3.0, поэтому вам нужно правильно обрабатывать мобильные телефоны ниже леденца. Думаю, "android:src" может помочь.

Goutham 08.04.2019 20:14

Имеет ли значение, что макет XML, содержащий android:background = "@drawable/ic_simplebox" (вызывает исключение инфлятора), раздувается в моем классе PagerAdapter? Я попытался добавить это в PagerAdapter, но это не сработало.

n00dles 08.04.2019 21:16
0
4
152
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Добавьте эти зависимости в ваш файл уровень приложения:

dependencies {

    implementation 'com.mikhaellopez:circularimageview:3.2.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
}
Ответ принят как подходящий

Оказывается, вы не можете использовать векторные рисунки на фоне с помощью библиотеки поддержки.

Если внимательно читать, то здесь на это намекает (правда, "опущением"):
Developer.Andriod — решение для обратной совместимости векторных рисунков

Related:
Is that right to make android.view.InflateException by using Vector drawables in android:background: line in a ImageView

Другие вопросы по теме