如何检查自定义视图是否有禁用的父视图?
How to check if a custom View has a disabled parent?
我有一个视图在禁用时可以进行一些自定义绘图:
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
}
它有效,但它会在每次抽奖时通过所有 parents。
我有一个视图在禁用时可以进行一些自定义绘图:
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
}
它有效,但它会在每次抽奖时通过所有 parents。