2017-08-01 30 views
1

我试图通过堆砌几个较小的布局和视图来建立复杂的布局。例如,我们有一个自定义的基于矢量渲染的图标,我们将其与一个TextView以及一些我们称为DecoratedIconTextView的类中的其他一些辅助对象一起显示。如果子视图的父母之一启用了状态更改,如何通知子视图?

问题在于渲染。该图标知道如何在正常和禁用状态下呈现自己。但是,即使它的父DecoratingIconTextView被禁用,该图标仍在报告它本身已启用。

想法包括一些方式来询问父链,看看他们中的任何一个是否报告为禁用(如拉),如果是的话,对待自己就好像你被禁用。但是,该方法不允许更改父级的isEnabled属性以传播给所有子级(ala push)。

我也不确定如何监视isEnabled属性的更改,因为我没有看到任何覆盖。

那么,如果一个孩子的父母的isEnabled状态发生了变化,孩子该如何通知他?

回答

0

当启用或禁用视图时,视图无效。因此,onDraw()方法将被调用。您可以扩展任何视图并覆盖onDraw()方法,并可以在视图状态发生更改时通知您的系统。

+0

但是,这将需要继承层次结构中的每个控件!例如,如果我的孩子在LinearLayout中并且LinearLayout被设置为禁用,我希望我的孩子能够绘制一个禁用状态。应该不需要子类化LinearLayout。是不是有一些你可以听的状态通知,所以你不必创建所有ViewGroup类的子类? – MarqueIV

相关问题