最近开发时,使用了最简单的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" />