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

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}
CanV.​​kt,这是一个View类。
class CanV(context: Context, attributeSet: AttributeSet): View(context){ ... }
activity_main.xml中的CanV View
<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 View 的AttributeSet?

最佳答案

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

class CanV : View {

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

   ...
}
可以从Kotlin(val v: CanV = CanV(this))中使用第一个,从XML扩展时自动使用第二个。

10-08 20:04