在Kotlin中扩展ImageView
时,我发现了奇怪的行为。
我有以下布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<AlphaImage
android:id="@+id/imageView2"
android:layout_width="320dp"
android:layout_height="50dp"
app:srcCompat="@drawable/blitz_1st_place" />
</FrameLayout>
AlphaImage
类:class AlphaImage(context: Context,attrs:AttributeSet?=null):ImageView(context,attrs) {
}
android studio中的布局预览显示图像为100%透明以及在运行时都是透明的。布局编辑器中没有错误。有趣的是,如果我将
AlphaImage
更改为ImageView
,图像开始按预期显示其内容,为什么会这样?如何扩展ImageView
? 最佳答案
这里的问题是app:srcCompat
属性。这是AppCompatImageView
类的support / androidx库属性。框架ImageView
只会忽略它。
当您使用<ImageView>
标记时,此方法起作用的原因是因为LayoutInflater
使用的support / androidx AppCompatActivity
会自动将AppCompatImageView
替换为其找到的任何<ImageView>
标记。然后AppCompatImageView
将看到app:srcCompat
属性,并适当地处理其值。
如果您希望自定义类自动处理该属性,只需扩展AppCompatImageView
而不是ImageView
即可。