gpt4 book ai didi

android - Kotlin:如何访问自定义 View 的属性

转载 作者:IT老高 更新时间:2023-10-28 13:34:03 25 4
gpt4 key购买 nike

我在 Kotlin 中创建了一个自定义 View ,并希望访问它的属性资源。

下面是我的代码

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

最佳答案

您不能从 init block 访问辅助构造函数参数。但是至少有两种方法可以实现类似的功能。

第一种方法是使用带有默认参数的单个主构造函数,而不是多个辅助构造函数。在这种情况下,您必须将 @JvmOverloads 注释应用于构造函数,以使 Kotlin 生成三个不同的构造函数。

class CustomCardView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout {

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

秒方法是两个链式构造函数,并将初始化 block 内容移动到具有三个参数的构造函数中。

class CustomCardView : FrameLayout {

constructor(context: Context) :
this(context, null)

constructor(context: Context, attrs: AttributeSet) :
this(context, attrs, 0)

constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) :
super(context, attrs, defStyleAttr) {

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

关于android - Kotlin:如何访问自定义 View 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com