Android开发--VerctorDrawable翻车篇

搞了很久android了,今天没想到在VerctorDrawable翻车了,一直在android 7.0的机器上开发的,考虑到更多用户机型版本的题,在android 4.4上翻车了,一直在报找不到图片资源文件的错误,折腾一番,发现是VectorDrawable xml资源文件的问题,发现在android 5.0一下不支持VectorDrawable,需要兼容一下。
错误大致如下

Caused by: android.view.InflateException: Binary XML file line #78: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInfl ater.java:620)
at android.view.LayoutInflater.createViewFromTag( LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater .java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater .java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:492)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:397)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:353)
at android.support.v7.app.AppCompatDelegateImpl V9.setContentView(AppCompatDelegateImplV9.j ava:287)
at android.support.v7.app.AppCompatActivity.setC ontentView(AppCompatActivity.java:139)
at com.xbw.bjut.ReviewActivity.onCreate(ReviewAc tivity.java:121)
at android.app.Activity.performCreate(Activity.java: 5263)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087)
at
 android.app.ActivityThread.performLaunchActivit y(ActivityThread.java:2172)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2257)
at android.app.ActivityThread.access$900(ActivityT hread.java:137)
at android.app.ActivityThread$H.handleMessage(A ctivityThread.java:1202)
at android.os.Handler.dispatchMessage(Handler.ja va:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.j ava:5089)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java: 515)
at com.android.internal.os.ZygoteInit$MethodAndAr gsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteIn it.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Nati ve Method)
at java.lang.reflect.Constructor.newInstance(Constr uctor.java:423)
at

 android.view.LayoutInflater.createView(LayoutInfl ater.java:594)
at android.view.LayoutInflater.createViewFromTag( LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater .java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater .java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:492)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:397)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:353)
at android.support.v7.app.AppCompatDelegateImpl V9.setContentView(AppCompatDelegateImplV9.j ava:287)
at android.support.v7.app.AppCompatActivity.setC ontentView(AppCompatActivity.java:139)
at com.xbw.bjut.ReviewActivity.onCreate(ReviewAc tivity.java:121)
at android.app.Activity.performCreate(Activity.java: 5263)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivit y(ActivityThread.java:2172)
at android.app.ActivityThread.handleLaunchActivity

 (ActivityThread.java:2257) at
android.app.ActivityThread.access$900(ActivityT hread.java:137)
at android.app.ActivityThread$H.handleMessage(A ctivityThread.java:1202)
at android.os.Handler.dispatchMessage(Handler.ja va:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.j ava:5089)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java: 515)
at com.android.internal.os.ZygoteInit$MethodAndAr gsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteIn it.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundExcept ion: File res/drawable/ic_write.xml from drawable resource ID #0x7f0200d0
at android.content.res.Resources.loadDrawable(Re sources.java:2096)
at android.content.res.TypedArray.getDrawable(Typ edArray.java:602)
at android.widget.ImageView.<init>(ImageView.java :129)

 at android.widget.ImageButton.<init>(ImageButton.j ava:87)
at android.support.design.widget.VisibilityAwareIma geButton.<init>(VisibilityAwareImageButton.java: 36)
at android.support.design.widget.FloatingActionButt on.<init>(FloatingActionButton.java:155)
at android.support.design.widget.FloatingActionButt on.<init>(FloatingActionButton.java:151)
at java.lang.reflect.Constructor.constructNative(Nati ve Method)
at java.lang.reflect.Constructor.newInstance(Constr uctor.java:423)
at android.view.LayoutInflater.createView(LayoutInfl ater.java:594)
at android.view.LayoutInflater.createViewFromTag( LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater .java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater .java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:492)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:397)
at android.view.LayoutInflater.inflate(LayoutInflater.j ava:353)
at

 android.support.v7.app.AppCompatDelegateImpl V9.setContentView(AppCompatDelegateImplV9.j ava:287)
at android.support.v7.app.AppCompatActivity.setC ontentView(AppCompatActivity.java:139)
at com.xbw.bjut.ReviewActivity.onCreate(ReviewAc tivity.java:121)
at android.app.Activity.performCreate(Activity.java: 5263)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivit y(ActivityThread.java:2172)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2257)
at android.app.ActivityThread.access$900(ActivityT hread.java:137)
at android.app.ActivityThread$H.handleMessage(A ctivityThread.java:1202)
at android.os.Handler.dispatchMessage(Handler.ja va:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.j ava:5089)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java: 515)
at

com.android.internal.os.ZygoteInit$MethodAndAr gsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteIn it.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector
at android.graphics.drawable.Drawable.createFrom XmlInner(Drawable.java:933)

解决方案:

//在gradle2.0及以上:
android {
  defaultConfig {
  vectorDrawables.useSupportLibrary = true
}}
//在gradle 1.5以前
android {
  defaultConfig {
    // Stops the Gradle plugin’s automatic rasterization of vectors
    generatedDensities = []
  }
  // Flag to tell aapt to keep the attribute ids around
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}

在布局文件中这样引用VectorDrawable,使用 app:srcCompat

 <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|bottom"
            android:layout_margin="@dimen/fab_margin"
            app:srcCompat="@drawable/ic_write" />

然而问题又来了,代码里有引用VectorDrawable的地方

images = new int[]{
                R.drawable.btn_fire,
                R.drawable.btn_msg,
                R.drawable.btn_find};

我们需要让Activity继承AppCompatActivity
并且添加

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   //矢量图兼容
   AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

这样貌似没有问题了。

参考简书https://www.jianshu.com/p/313912ff2f37

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
v-model指令主要用于实现双向数据绑定,通常用于表单元素的输入和输出。它将表单元素的值与组件中的数据进行绑定,当表单元素的值发生变化时,组件中的数据也会相应地更新;反之,当组件中的数据发生变化时,表单元素的值也会相应地更新。 而函数是一种不可变的数据类型,它的值不能随意地改变,因此在v-model指令中不能直接绑定函数。 如果需要在表单元素上绑定一个函数,可以使用事件监听器来实现。例如,可以使用v-on指令来监听表单元素的change事件,并在事件处理函数中调用相应的函数。 举个例子,假设我们有一个计数器组件,它的值可以通过一个函数进行增减: ``` <template> <div> <input type="number" v-model="count"> <button @click="increment">+</button> <button @click="decrement">-</button> </div> </template> <script> export default { data() { return { count: 0 } }, methods: { increment() { this.count++ this.updateCount(this.count) }, decrement() { this.count-- this.updateCount(this.count) }, updateCount(count) { // 在这里调用相应的函数 } } } </script> ``` 在这个例子中,我们通过v-model指令将表单元素的值与组件中的count数据进行了绑定,在点击加号或减号按钮时,会触发increment或decrement方法,并在这两个方法中更新count数据,同时调用updateCount方法将更新后的count值传递给相应的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值