如何在 kotlin 中扩展 ImageView class?
how to extend ImageView class in kotlin?
我在 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:
class AlphaImage(context: Context,attrs:AttributeSet?=null):ImageView(context,attrs) {
}
android studio 中的布局预览显示图像为 100% 透明,runtime.There 布局中没有错误 editor.What 有趣的是如果我更改 AlphaImage
到 ImageView
图像开始显示其内容为 expected.Why 这是怎么回事?如何扩展 ImageView
?
这里的问题是 app:srcCompat
属性。这是 AppCompatImageView
class 的 support/androidx 库属性。框架 ImageView
将忽略它。
之所以在您使用 <ImageView>
标签时起作用,是因为 AppCompatActivity
使用的 support/androidx LayoutInflater
会自动将 AppCompatImageView
替换为它找到的任何 <ImageView>
标签。 AppCompatImageView
然后会看到 app:srcCompat
属性,并适当地处理它的值。
如果您希望自定义 class 自动处理该属性,只需扩展 AppCompatImageView
而不是 ImageView
。
我在 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:
class AlphaImage(context: Context,attrs:AttributeSet?=null):ImageView(context,attrs) {
}
android studio 中的布局预览显示图像为 100% 透明,runtime.There 布局中没有错误 editor.What 有趣的是如果我更改 AlphaImage
到 ImageView
图像开始显示其内容为 expected.Why 这是怎么回事?如何扩展 ImageView
?
这里的问题是 app:srcCompat
属性。这是 AppCompatImageView
class 的 support/androidx 库属性。框架 ImageView
将忽略它。
之所以在您使用 <ImageView>
标签时起作用,是因为 AppCompatActivity
使用的 support/androidx LayoutInflater
会自动将 AppCompatImageView
替换为它找到的任何 <ImageView>
标签。 AppCompatImageView
然后会看到 app:srcCompat
属性,并适当地处理它的值。
如果您希望自定义 class 自动处理该属性,只需扩展 AppCompatImageView
而不是 ImageView
。