Android Kotlin - 如何扩展 ConstraintLayout?
Android Kotlin - How to extend ConstraintLayout?
我希望我的 ConstaintLayout 带有额外的附加属性,但我无法扩展它。更准确地说,我无法将正确的构造函数放入
class myCL(): ConstraintLayout(???) {
}
为确保您的行为不会出现任何怪癖,您应该这样实施。
class myCL: ConstraintLayout {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?,
@AttrRes defStyleAttr: Int) : super(context, attrs, defStyleAttr)
}
您真正需要的构造函数是具有所有参数的构造函数:
class myCL(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) :
ConstraintLayout(context, attrs, defStyleAttr) {
}
如果您想轻松实现所有三个构造函数,您可以使用 @JvmOverloads
并使用合理的默认值。
class myCL @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : ConstraintLayout(context, attrs, defStyleAttr) {
}
见https://developer.android.com/reference/android/support/constraint/ConstraintLayout
你也可以这样做来限制只有一个 super
调用 --
class MyConstraintLayout: ConstraintLayout {
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, -1)
constructor(context: Context, attrs: AttributeSet?, @AttrRes defStyleAttr: Int) : super(context, attrs, defStyleAttr)
}
我希望我的 ConstaintLayout 带有额外的附加属性,但我无法扩展它。更准确地说,我无法将正确的构造函数放入
class myCL(): ConstraintLayout(???) {
}
为确保您的行为不会出现任何怪癖,您应该这样实施。
class myCL: ConstraintLayout {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?,
@AttrRes defStyleAttr: Int) : super(context, attrs, defStyleAttr)
}
您真正需要的构造函数是具有所有参数的构造函数:
class myCL(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) :
ConstraintLayout(context, attrs, defStyleAttr) {
}
如果您想轻松实现所有三个构造函数,您可以使用 @JvmOverloads
并使用合理的默认值。
class myCL @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : ConstraintLayout(context, attrs, defStyleAttr) {
}
见https://developer.android.com/reference/android/support/constraint/ConstraintLayout
你也可以这样做来限制只有一个 super
调用 --
class MyConstraintLayout: ConstraintLayout {
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, -1)
constructor(context: Context, attrs: AttributeSet?, @AttrRes defStyleAttr: Int) : super(context, attrs, defStyleAttr)
}