Получение атрибутов просмотра в пользовательском представлении chid

#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.