#android #android-custom-view
#Android #android-пользовательский вид
Вопрос:
У меня есть пользовательский вид с некоторыми пользовательскими атрибутами.
class SomeCustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
Понятно, как получить атрибуты здесь:
val a = context.theme.obtainStyledAttributes(attrs, R.styleable.SomeCustomView, 0, 0)
try {
someAttribute = a.getInt(R.styleable.SomeCustomView_swomeAttribute, DEFAULT_VALUE)
//...
} finally {
a.recycle()
}
Макет представления расширен с
inflate(context, R.layout.some_view, this)
Дело в том, что оно R.layout.some_view
содержит другое пользовательское представление в качестве одного из своих дочерних элементов, которое не должно быть открыто ( ChildCustomView
).
Вопрос в том, как получить атрибуты, установленные для SomeCustomView
внутри ChildCustomView
?
Ответ №1:
Вы не можете получить атрибут из родительского представления, пока дочернее представление не будет увеличено.
Таким образом, вы должны хранить их в полях ChildCustomView и onFinishInflate()
из SomeParentCustomView извлекать их с помощью доступа к свойствам или getter.