#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
}
Это работает, но оно проходит через всех родителей при каждом рисовании.