6

geladen werden Kürzlich möchte ich Vector Drawable verwenden, um alle Symbole zu verwalten. Vector Drawable funktioniert gut auf Android API 21+, aber wenn ich versuchte, es auf einem meiner Testgeräte zu verwenden [Amazon KFTHWI Android 4.4.3 API 19], können alle Icons überhaupt nicht geladen werden!Vector Drawable kann nicht in Android API 19 mit Hilfe der Support-Bibliothek (23.4.0)

Ich folgte den Tipps Here und Here. Aber noch ist es nicht funktioniert ....

Hier ist meine Konfiguration:

Im Projekt gradle Skriptdatei:

buildscript { 
    repositories { 
    jcenter() 
    } 
    dependencies { 
    classpath 'com.android.tools.build:gradle:2.1.0' 
    classpath ... 
    } 
} 

So soll meine gradle Plugin-Version seines 2.0+

Im Hauptmodul gradle Skriptdatei:

android{ 
    ... 
    defaultConfig{ 
     ... 
     vectorDrawables.useSupportLibrary = true 
     ... 
    } 
} 
dependencies{ 
    ... 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:gridlayout-v7:23.4.0' 
    ... 
} 

Dieses Hauptmodul enthält die App. Der Grund, warum ich die gridlayout-v7-Bibliothek kompiliere, ist, dass ich einige Gridlayouts in der App verwende.

Hier ist meine Umsetzung:

Weil ich brauche ein paar Ansichten entsprechend die Daten zu erzeugen, die ich erhielt, habe ich die Bildquelle in Java-Code.

ImageView icon = new ImageView(this); 
icon.setImageResource(R.drawable.ic_lock_black_24dp); 

ic_lock_black_24dp.xml ist aus einem Material Icon Bibliothek in Vector Asset-Studio erzeugt.

Meine Erwartung:

ich meine Konfiguration in meinem Hauptmodul gradle Skriptdatei glauben Android Studio verhindern PNGs für Vektoren zu erzeugen und ermöglicht Android Drawables für Vektoren direkt zur Laufzeit zu erzeugen.

Aber ich bin nur teilweise richtig ... Meine Konfiguration verhindert Android Studio tatsächlich zu generieren Pngs während des Aufbaus. ABER mein altes Android-Gerät [API 19] kann keine Drawables von Vektoren generieren !! So gibt es keine Symbole in der App jetzt ...

Hier werden die Ausnahmen: [Amazon KFTHWI Android 4.4.3 API 19]

W/ImageView:Unable to find resource:2130837702 
    android.content.res.Resources$NotFoundException: File res/drawable/ic_lock_black_24dp.xml from drawable resource ID#0x7f0200c6 
     at android.content.res.Resources.loadDrawable(Resources.java:2206) 
     at android.content.res.Resources.getDrawable(Resources.java:707) 
     at android.widget.ImageView.resolveUri(ImageView.java:651) 
     at android.widget.ImageView.onMeasure(ImageView.java:774) 
     at android.view.View.measure(View.java:17038) 
     at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
     at android.view.View.measure(View.java:17038) 
     at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1052) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:590) 
     at android.view.View.measure(View.java:17038) 
     at android.support.v7.widget.GridLayout.measureChildWithMargins2(GridLayout.java:896) 
     at android.support.v7.widget.GridLayout.measureChildrenWithMargins(GridLayout.java:906) 
     at android.support.v7.widget.GridLayout.onMeasure(GridLayout.java:945) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
     at android.view.View.measure(View.java:17038) 
     at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1273) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
     at android.widget.ScrollView.onMeasure(ScrollView.java:373) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) 
     at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2346) 
     at android.view.View.measure(View.java:17038) 
     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2004) 
     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1176) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1368) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1057) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5857) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:815) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:628) 
     at android.view.Choreographer.doFrame(Choreographer.java:598) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:801) 
     at android.os. 

Ironnically, alle Symbole gut vorstellen, wenn ich Verwenden Sie nicht die AppCompat Support-Bibliothek, aber ich weiß, dass Android Studio beim Erstellen Pgns generiert. Ich kann diese PNGs sogar in der APK finden.

Mein Problem:

Nun möchte ich noch von Vector Drawable in alten Android-Geräte profitieren, das heißt, ich bin immer noch PNGs zu vermeiden versuchen, mit ...Könnte mir jemand ein paar Tipps geben oder mir sagen, in welchen Schritten habe ich etwas falsch

+0

Verwenden Sie 'icon.setImageDrawable' mit' VectorDrawableCompat' Instanz – pskink

+0

'R.drawable.ic_lock_black_24dp' ohne' .xml' am Ende. Ressourcennamen haben keine Erweiterungen. –

+0

@EugenPechanec Yeah .... Es ist ein Tippfehler ... Ich benutze R.drawable.ic_lock_black_24dp als Resouce-Name in Java-Code .... Vielen Dank für den Hinweis ~~ –

Antwort

3

Sie haben new AppCompatImageView(this) zu sagen. Wenn Sie Ansichten manuell erstellen, müssen Sie das Präfix AppCompat hinzufügen.

+0

Vielen Dank. Es funktioniert ~~ –

1

Es ist eine Bibliothek unterstützt api 14+ für VectorDrawable und AnimatedVectorDrawable ich verwende: https://github.com/wnafee/vector-compat

+0

Was ist der Vorteil der Verwendung dieser 3rd Party-Bibliothek jetzt, dass Google Support-Bibliothek bietet VectorDrawable für buchstäblich alle Geräte (API 7+)? –

+0

Sie haben Recht, aber ich benutze dies, weil es einfach zu Morphs ist. Auf der anderen Seite unterhalb von API 16 ist die Nutzungsstatistik <5%, also denke ich, ich brauche nicht. (Https://developer.android.com/about/dashboards/index.html) – eralp

+0

Ich benutze nicht die offizielle Methode sogar auf 21+. VectorDrawable unterstützt keine aus Illustrator exportierten SVGs (Text, Transformationen, eingebettete Objekte). Ich bevorzuge einen einfachen SVG-Reader - unterstützt alles und ist immun gegen Google Updates (die neigen dazu, Dinge zu brechen) – Zielony

Verwandte Themen