在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即可。

09-30 19:41