2017-08-01 29 views
1

我試圖通過堆砌幾個較小的佈局和視圖來建立複雜的佈局。例如,我們有一個自定義的基於矢量渲染的圖標,我們將其與一個TextView以及一些我們稱爲DecoratedIconTextView的類中的其他一些輔助對象一起顯示。如果子視圖的父母之一啓用了狀態更改,如何通知子視圖?

問題在於渲染。該圖標知道如何在正常和禁用狀態下呈現自己。但是,即使它的父DecoratingIconTextView被禁用,該圖標仍在報告它本身已啓用。

想法包括一些方式來詢問父鏈,看看他們中的任何一個是否報告爲禁用(如拉),如果是的話,對待自己就好像你被禁用。但是,該方法不允許更改父級的isEnabled屬性以傳播給所有子級(ala push)。

我也不確定如何監視isEnabled屬性的更改,因爲我沒有看到任何覆蓋。

那麼,如果一個孩子的父母的isEnabled狀態發生了變化,孩子該如何通知他?

回答

0

當啓用或禁用視圖時,視圖無效。因此,onDraw()方法將被調用。您可以擴展任何視圖並覆蓋onDraw()方法,並可以在視圖狀態發生更改時通知您的系統。

+0

但是,這將需要繼承層次結構中的每個控件!例如,如果我的孩子在LinearLayout中並且LinearLayout被設置爲禁用,我希望我的孩子能夠繪製一個禁用狀態。應該不需要子類化LinearLayout。是不是有一些你可以聽的狀態通知,所以你不必創建所有ViewGroup類的子類? – MarqueIV

相關問題