首页 > 解决方案 > 如何在 Kotlin 中创建 View 类对象?什么是属性集?如何为视图创建它?

问题描述

在 Android 中,我有两个类文件,MainActivity 和 CanV。

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

CanV.​​kt,这是一个视图类。

class CanV(context: Context, attributeSet: AttributeSet): View(context){ ... }

activity_main.xml 中的 CanV 视图

<com.app.app_name.CanV
            android:id="@+id/cans"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="60dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="1.0">
</com.app.app_name.CanV>

现在我想在 MainActivity 中创建 CanV 类对象。我来试试: val c: CanV = CanV(this, ?)

但是,我不知道 AttributeSet 参数值。如何创建和传递 CanV 视图的 AttributeSet?

标签: androidkotlin

解决方案


如果您希望能够CanV从 XML 和 Java/Kotlin 创建实例,您应该提供两个构造函数:

class CanV : View {

   constructor(context: Context) : super(context)
   constructor(context: Context, attrs: AttributeSet) : super(context, attrs)

   ...
}

第一个可以在 Kotlin ( val v: CanV = CanV(this)) 中使用,第二个在从 XML 膨胀时自动使用。


推荐阅读