我在Kotlin中创建了一个自定义视图,并希望访问它的属性资源。
下面是我的代码
class CustomCardView : FrameLayout {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
init {
LayoutInflater.from(context).inflate(R.layout.view_custom_card, this, true)
if (attrs != null) {
val a = context.obtainStyledAttributes(attrs, R.styleable.custom_card_view)
if (a.hasValue(R.styleable.custom_card_view_command)) {
var myString = a.getString(R.styleable.custom_card_view_command)
}
}
}
}
注意这会在init函数中的attrs
中出错。我想知道如何访问attrs
?
5条答案
按热度按时间hmae6n7t1#
你不能从
init
块中访问辅助构造函数参数,但是至少有两种方法可以实现类似的功能。第一种方法是使用一个带默认参数的主构造函数,而不是多个次构造函数,在这种情况下,必须对构造函数应用
@JvmOverloads
注解,以便使Kotlin生成三个不同的构造函数。第二种方法是使用两个链式构造函数,并使用三个参数将init块内容移动到构造函数中。
iyzzxitl2#
为什么不直接跳过这些带默认值的冗长构造函数,像这样做呢?
brvekthn3#
可以使用核心ktx扩展函数
withStyledAttributes
(https://android.github.io/android-ktx/core-ktx/androidx.content/android.content.-context/with-styled-attributes.html)dauxcl2d4#
调整代码,我认为您还可以做如下操作:
b09cbbtk5#
这有点冗长,但在所有条件下都应该可以正常工作: