Wenn ich in gradle vectorDrawables.useSupportLibrary = true verwende, dann stoppte die App leider. Wenn ich vectorDrawables.useSupportLibrary = true entferne, funktioniert die App.
Mein gradle:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
vectorDrawables.useSupportLibrary = true
applicationId "com.helikanon.firstapp"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.Android.support:appcompat-v7:25.1.0'
compile 'com.Android.support:design:25.1.0'
compile 'com.jakewharton:butterknife:8.4.0'
compile 'com.Android.support:support-v4:25.1.0'
testCompile 'junit:junit:4.12'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
compile 'uk.co.chrisjenx:calligraphy:2.2.0'
compile 'com.google.Android.gms:play-services-ads:10.0.1'
}
Die Fehler :
E/AndroidRuntime: FATAL EXCEPTION: main
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.helikanon.firstapp/com.helikanon.firstapp.activities.MainActivity}: Android.view.InflateException: Binary XML file line #62: Error inflating class Button
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2059)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2084)
at Android.app.ActivityThread.access$600(ActivityThread.Java:130)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1195)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:137)
at Android.app.ActivityThread.main(ActivityThread.Java:4745)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:511)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:786)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Android.view.InflateException: Binary XML file line #62: Error inflating class Button
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:704)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
.
.
.
Die App stürzt ab, wenn ich Api 16 und Api 19 verwende, aber wenn ich Api 23 verwende, funktioniert es.
Sie können Vektorzeichnungen in keiner anderen Ansicht außer ImageView
in Pre-Lollipop verwenden.
Bitte lesen Sie diese SO Answer von Google Developer Advocate.
Für AppCompat-Benutzer haben wir beschlossen, die Funktionalität zu entfernen, mit der Sie Vektorzeichen aus Ressourcen auf Geräten vor Lollipop verwenden können, da bei der Implementierung in Version 23.2.0/23.2.1 [ https: // code.google.com/p/Android/issues/detail?id=205236 , https://code.google.com/p/Android/issues/detail?id=204708 ] . Die Verwendung von
app:srcCompat
UndsetImageResource()
funktioniert weiterhin.
Wenn Sie den Vector Drawables Pre-Lollipop verwenden möchten, können Sie ihn programmgesteuert festlegen, indem Sie ihn in einen Drawable konvertieren.
Drawable drawable;
if (Android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
drawable = context.getResources().getDrawable(drawableResId, context.getTheme());
} else {
drawable = VectorDrawableCompat.create(context.getResources(), drawableResId, context.getTheme());
}
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
Ich war an einem Übungsprojekt beteiligt und habe versucht, Hintergrundaufgaben und -dienste in Android zu erlernen. Als ich den Beispielcode abgerufen habe, wurde er aufgrund von this -Fehlern anfangs nicht kompiliert. Deshalb habe ich das folgende Tag in die build.gradle-Datei der App eingefügt, um das Kompilierungsproblem zu beseitigen:
Android {
defaultConfig{
vectorDrawables.useSupportLibrary = true
}
}
In dem Moment, in dem ich diese Konfiguration hinzufügte, stürzte auch meine App in Microsoft Android Simulator genau so ab, wie es OP beschrieben hat.
Da ich mich momentan auf Hintergrundaufgaben konzentrierte, wollte ich mit dem Debuggen meiner App beginnen. Also habe ich die obigen Konfigurationseinstellungen wieder entfernt. Außerdem habe ich ein Attribut mit dem Namen Android:fillColor
Im Tag path
einer meiner darstellbaren Ressourcen entfernt (oder Sie können den Wert @color/colorAccent
Durch einen hexadezimalen Code wie z #FF000000
). Nach dem Entfernen (oder Ändern mit hexadezimalem Code) ist mein anfänglicher Kompilierungsfehler nicht aufgetreten:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:width="80dp"
Android:height="80dp"
Android:viewportWidth="24"
Android:viewportHeight="24">
<path
Android:fillColor="@color/colorAccent"
Android:pathData="M16.01 7L16 3h-2v4h-4V3H8v4h-0.01C7 6.99 6 7.99 6 8.99v5.49L9.5
18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z" />
<path
Android:pathData="M0 0h24v24H0z" />
</vector>
Nach dem Entfernen sieht es so aus:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:width="80dp"
Android:height="80dp"
Android:viewportWidth="24"
Android:viewportHeight="24">
<path
Android:pathData="M16.01 7L16 3h-2v4h-4V3H8v4h-0.01C7 6.99 6 7.99 6 8.99v5.49L9.5
18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z" />
<path
Android:pathData="M0 0h24v24H0z" />
</vector>
Mein MS Android Emulator hatte KitKat (4.4). Mein Code stürzte ab, als meine App versuchte, Vektor-Drawables auf einer Vor-Lollipop-Version von Android= as zu verwenden Erwähnt in Vipuls akzeptierter Antwort.
Um VectorDrawableCompat verwenden zu können, müssen Sie Android.defaultConfig.vectorDrawables.useSupportLibrary = true. einstellen
Um VectorDrawableCompat zu verwenden, müssen Sie zwei Änderungen an Ihrem Projekt vornehmen. Stellen Sie zuerst Android.defaultConfig.vectorDrawables.useSupportLibrary = true in Ihrer build.gradle-Datei ein und verwenden Sie zweitens app: srcCompat anstelle von Android: src, um auf Vektorzeichnungen zu verweisen.
1) Gehen Sie zu Ihrem build.gradle (Modul: App) und fügen Sie die folgende Zeile zu Android Block. Es sollte so aussehen.
Android {
compileSdkVersion 27
defaultConfig {
applicationId "..."
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
------> Android.defaultConfig.vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
}
}
}
2) Geben Sie als Quelle srcCompat an, damit Ihre Anwendung Vektorgrafiken verwenden kann.
app: srcCompat = "@ drawable/plane"