2016-03-17 58 views
1

我正在嘗試使用新的VectorDrawableCompat來處理已轉換爲Android矢量格式的SVG。我按照Android開發人員博客Android Support Library 23.2中提到的設置說明進行操作,並且我能夠以這種方式顯示矢量繪圖。雖然大部分時間,這是我需要在應用程序中顯示大部分圖標/圖像的方式,但我確實需要從可以頻繁更改的服務器加載某些圖像列表。這樣做的主要原因是,我不需要發佈更新到應用程序只是爲了更改/添加圖標。加載Android矢量從res/drawables以外的位置繪製

作爲一個測試,我試圖從Assets中加載相同的格式(Android矢量可繪製格式),並且當VectorDrawableCompat嘗試爲xml生成屬性集以便拉出標籤中的屬性時,我得到一個運行時例外嘗試投放XmlPullAttributes到XmlBlockParser:

java.lang.RuntimeException: java.lang.ClassCastException: android.util.XmlPullAttributes cannot be cast to android.content.res.XmlBlock$Parser 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641) 
                        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:148) 
                        at android.app.ActivityThread.main(ActivityThread.java:5849) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:763) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653) 
                        Caused by: java.lang.ClassCastException: android.util.XmlPullAttributes cannot be cast to android.content.res.XmlBlock$Parser 
                        at android.content.res.Resources.obtainAttributes(Resources.java:1896) 
                        at android.support.graphics.drawable.VectorDrawableCommon.obtainAttributes(VectorDrawableCommon.java:43) 
                        at android.support.graphics.drawable.VectorDrawableCompat.inflate(VectorDrawableCompat.java:469) 
                        at android.support.graphics.drawable.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:436) 
                        at com.mobile.hilton.amentiesicontestr.MainActivity.createFromXmlStream(MainActivity.java:65) 
                        at com.mobile.hilton.amentiesicontestr.MainActivity.onCreate(MainActivity.java:33) 
                        at android.app.Activity.performCreate(Activity.java:6570) 
                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)  
                        at android.app.ActivityThread.-wrap12(ActivityThread.java)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:148)  
                        at android.app.ActivityThread.main(ActivityThread.java:5849)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:763)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)  

據抱怨,我相信,因爲它無法找到Android的命名空間VectorDrawable XML引用。通常drawables是預編譯的,在這種情況下,我的xml不是。有關如何解決這個問題或進行這項工作的任何想法?也許我錯過了Android文檔中的一些東西,但是我找不到從res/drawables外部支持VectorDrawable的方法。任何幫助將是欣賞,預先感謝你。

+0

'VectorDrawableCompat2'從哪裏來?我無法在支持庫中找到它。 – CommonsWare

+0

謝謝你指出,我有錯誤的堆棧跟蹤。我剛更新了正確的堆棧跟蹤VectorDrawableCompat –

+0

是的,它看起來像'VectorDrawable' /'VectorDrawableCompat'有線只能使用資源。你可能會分叉'VectorDrawableCompat'並解決這個問題。關閉袖口,需要'TypedArray'(from'obtainAttributes()')被限制到從'inflate()'調用的'updateStateFromTypedArray()'方法。也許你可以將'obtainAttributes()'和'updateStateFromTypedArray()'替換爲可以使用簡單的'XmlPullParser'的代碼。 – CommonsWare

回答

0

一個解決方案可能是在可繪製文件夾中添加矢量xml。編譯apk。解壓縮apk並從apk中複製已編譯的矢量xml文件。上傳這個載體xml到服務器。下載此文件並動態擴充它。