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