背景
我有一个布局,有一些特殊的状态(如被选中/按下),我希望设置它的孩子,以应用自己的绘图基于此布局。
我正在寻找一种替代方法,将duplicateParentState的每个子代(甚至可能是所有子代)都设置为true。
我所尝试的
我尝试过让自定义视图具有一个属性,将其设置为每个子视图,但我找不到在哪个方法调用中将此属性应用于其所有子视图。在我尝试过的每个方法中,它要么为getChildCount()返回0,要么只是不对子视图本身执行任何操作(使用setDuplicateParentStateEnabled())。
问题
如文档所述,使用setDuplicateParentStateEnabled不会在我需要它的情况下执行任何操作:
注意:在当前实现中,将视图添加到ViewGroup后将此属性设置为true可能根本不起作用.应始终从XML使用此属性,或在将此视图添加到ViewGroup前将其设置为true.
所以看起来我用得太晚了,但是我需要晚调用它,因为子对象还不存在于父对象中...
问题是
如何实现避免为每个子视图设置duplicateParentState,而只将其设置为父视图的功能?
1条答案
按热度按时间bhmjp9jg1#
像你说的那样,扩展小部件并覆盖onLayout()怎么样?这样你就可以确保在第一次绘制小部件时也修改子部件的状态。当调用onLayout()时,getChildCount()将总是返回实际的子部件数量。例如:
请注意,您实际上是在扩展小部件(在任何被覆盖的方法上调用super)。