问题描述
override fun onDraw(canvas: Canvas) {
// Drawing...
if (!this.isEnabled) {
// Custom drawing...
}
}
当父级之一被禁用时,逻辑上也绘制此禁用状态是合理的。但是,即使禁用了其中一个父视图,isEnabled
也是正确的。
android:duplicateParentState
看起来可以做到,但有时我会深深嵌套此视图,并转移所有状态(受压等)。
规范的处理方式是什么?
解决方法
这是我当前的解决方案:
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
}
它可以工作,但是每次抽奖时都要经过所有父母。