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按下这些状态更改时过滤层次结构?

谢谢!

4

2 回答 2

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。

于 2011-06-16T22:35:10.587 回答
0

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

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

于 2011-06-16T21:57:08.437 回答