从res / drawables以外的位置加载Android Vector Drawable

时间:2016-03-17 14:30:39

标签: android android-vectordrawable

我正在尝试使用新的VectorDrawableCompat来处理转换为Android Vector格式的SVG。我按照Android开发人员博客Android Support Library 23.2中提到的设置说明进行操作,并且能够以这种方式显示矢量绘图。虽然大多数时候,这是我需要在应用程序中显示大多数图标/图像的方式,但我确实需要从可以经常更改的服务器加载特定的图像列表。这样做的主要原因是我不需要发布更新到应用程序只是为了更改/添加图标。

作为测试,我试图从Assets加载相同的格式(Android Vector Drawable格式),当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) 

我相信这是抱怨,因为它无法找到VectorDrawable XML引用的Android命名空间。通常,drawable是预编译的,在这种情况下,我的xml不是。有关如何绕过这个或使其工作的任何想法?也许我遗漏了Android文档中的内容,但我找不到从res / drawables外部支持VectorDrawable的方法。任何帮助将是感激,谢谢你提前。

1 个答案:

答案 0 :(得分:0)

一种解决方案是将vector xml添加到drawable文件夹中。编译apk。解压缩apk并从apk复制编译后的矢量xml文件。将此向量xml上载到服务器。下载此文件并动态膨胀。