安卓 ImageView使用 drawable下资源 闪退的解决方法

最近开发时,使用了最简单的Imageview,想将背景(或者src属性)设置为drawable下的某个资源。
然而在一台安卓4.4的机器上运行时闪退,报错

 android.view.InflateException: Binary XML file line #0: Error inflating class ImageView

奇了怪了,这么简单的布局都能报错。

费了好大劲,有的说版本兼容性的问题(因为用到了svg资源),最后才发现,原来drawable资源放在了后缀为v-21的目录下

这里写图片描述

如上图所示

布局文件如下:

    <ImageView
        android:id="@+id/imageView5"
        android:layout_width="0dp"
        android:layout_height="151dp"
        android:layout_marginEnd="15dp"
        android:layout_marginStart="15dp"
        android:layout_marginTop="16dp"
        android:background="@drawable/home_shape_second"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView6" />

当把资源放置到drawable目录下后,问题得到了解决。

另外还有一个采用了svg作为图片的Imageview

    <android.support.v7.widget.AppCompatImageView
        android:id="@+id/imageView7"
        android:layout_width="37dp"
        android:layout_height="41dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="35dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/imageView6"
        app:layout_constraintStart_toStartOf="@+id/imageView6"
        app:layout_constraintTop_toTopOf="@+id/imageView6"
        app:srcCompat="@drawable/ic_lawyer_big" />

也是因为将 ic_lawyer_big放到了v-21导致的。并非最初预测的4.4版本不支持svg作为资源。

题外话,进行了测试,使用普通的ImageView控件也可以支持svg资源。如下:

    <ImageView
        android:id="@+id/imageView7"
        android:layout_width="37dp"
        android:layout_height="41dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="35dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/imageView6"
        app:layout_constraintStart_toStartOf="@+id/imageView6"
        app:layout_constraintTop_toTopOf="@+id/imageView6"
        app:srcCompat="@drawable/ic_lawyer_big" />

当然前提是需要使用app:srcCompat这个属性来指定资源。

如果使用android:src则仍会报错。如下:

    <ImageView
        android:id="@+id/imageView7"
        android:layout_width="37dp"
        android:layout_height="41dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="35dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="@+id/imageView6"
        app:layout_constraintStart_toStartOf="@+id/imageView6"
        app:layout_constraintTop_toTopOf="@+id/imageView6"
        android:src="@drawable/ic_lawyer_big" />

猜你喜欢

转载自blog.csdn.net/thezprogram/article/details/78673129
今日推荐