Как проверить, есть ли у пользовательского представления отключенный родительский элемент?

#android #android-view

#Android #android-просмотр

Вопрос:

У меня есть представление, которое выполняет некоторые пользовательские отрисовки, когда оно отключено:

 override fun onDraw(canvas: Canvas) {
    // Drawing...

    if (!this.isEnabled) {
        // Custom drawing...
    }
}
  

Когда один из родительских элементов отключен, было бы логично, чтобы он также отображал это отключенное состояние. Однако isEnabled это верно, даже если один из родительских представлений отключен.

android:duplicateParentState похоже, он может это сделать, но я иногда глубоко вкладываю это представление, И оно передает все состояния (нажато и т. Д.).

Каков канонический способ справиться с этим?

Ответ №1:

Вот мое текущее решение:

 override fun onDraw(canvas: Canvas) {
    // Drawing...

    // Check for both the view and all its parents.
    if (!this.isEnabled || isAnyParentDisabled(parent)) {
        // Custom drawing...
    }
}

private fun isAnyParentDisabled(parent: ViewParent?): Boolean {
    // Recursively check for each parent if it's 
    // a View that has isEnabled set to false.
    val v = parent as? View ?: return false
    return if (v.isEnabled)
        anyParentDisabled(v.parent)
    else
        true
}

  

Это работает, но оно проходит через всех родителей при каждом рисовании.