2011-06-16 64 views
4

有沒有人知道在創建自定義複合控件以將容器狀態更改應用於所有子項時適當的機制是什麼?在我看來,應該有一種簡單的方法來設置ViewGroup以將所有狀態更改(按下,啓用等)轉發給每個孩子。複合控件轉發狀態

例如,如果我創建的線沿線的自定義窗口小部件:

public class MyWidget extends RelativeLayout { 

    private TextView mTitleView, mValueView; 
    private ImageView mImageView; 

    public ValueButton(Context context) { 
     this(context, null); 
    } 

    public ValueButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     //View setup, etc. 
    } 
} 

在許多情況下,有一些我想在應用更改的切換連接到孩子繪製或顏色狀態列表整個小部件作爲一個整體。我需要添加到這種小部件中,以便在例如我撥打MyWidget.setEnabled()或按下MyWidget時,這些狀態更改會過濾掉層次結構?

謝謝!

回答

3

添加android:duplicateParentState="true"每個孩子

http://developer.android.com/reference/android/view/View.html#attr_android:duplicateParentState

編輯(也許是通過使用getChildAt(int index)孩子的迭代):你需要設置它在XML

注:在當前實現中,在視圖添加到ViewGroup後將此屬性設置爲true可能根本沒有任何效果。在將此視圖添加到ViewGroup之前,應始終使用該屬性或將其設置爲true。

+0

正是我所需要的。我知道它必須簡單,只是在文檔中錯過了; p謝謝! – Devunwired 2011-06-17 15:09:57

+0

這是一個更安全的生活! – 2011-08-10 10:17:19

0

不確定我是否會在這裏得到很多幫助,但這是一個有趣的問題讓我思考,因爲我認爲我會想要做一些非常相似的事情。

在級聯狀態信息到子視圖方面,有一種可能的方法是僅在父視圖組中包含狀態信息,並且在子視圖中使用getParent()來訪問該信息?