复合控制转发状态

时间:2011-06-16 21:30:59

标签: android viewgroup

在创建自定义复合控件以将状态更改从容器应用到所有子项时,是否有人知道适当的机制是什么?在我看来,应该有一种直接的方法来设置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时,这些状态更改会过滤层次结构?

谢谢!

2 个答案:

答案 0 :(得分:3)

为每个孩子添加android:duplicateParentState="true"(可能使用getChildAt(int index)遍历孩子)

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

修改:您需要在xml

中进行设置
  

注意:在当前实现中,将视图添加到ViewGroup后将此属性设置为true可能根本不起作用。在将此视图添加到ViewGroup之前,应始终从XML使用此属性或将其设置为true。

答案 1 :(得分:0)

不确定我是否会在这里提供很多帮助,但这对我来说是一个有趣的问题,因为我认为我想要做一些非常相似的事情。

在将状态信息级联到子视图方面,一种可能的方法是仅在父ViewGroup中包含该状态信息,并且在子视图中使用getParent()来访问该信息吗?