【问题标题】:Android Kotlin - How to extend ConstraintLayout?Android Kotlin - 如何扩展 ConstraintLayout?
【发布时间】:2018-11-10 22:35:32
【问题描述】:

我希望我的 ConstaintLayout 带有额外的附加属性,但我无法扩展它。更准确地说,我无法将正确的构造函数放入

class myCL(): ConstraintLayout(???) {
}

【问题讨论】:

    标签: android kotlin extend


    【解决方案1】:

    为确保您的行为没有任何怪癖,您应该像这样实现它。

    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)
    }
    

    【讨论】:

      【解决方案2】:

      您真正需要的构造函数是具有所有参数的构造函数:

      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

      【讨论】:

      • 完美,构造函数重载注释对我有用。
      【解决方案3】:

      你也可以这样做来限制只有一个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)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-10
        • 2018-07-03
        • 1970-01-01
        相关资源
        最近更新 更多