【问题标题】:Compound Controls forwarding State复合控制转发状态
【发布时间】:2011-06-16 21:30:58
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: android viewgroup


    【解决方案1】:

    android:duplicateParentState="true" 添加到每个孩子(也许使用getChildAt(int index) 遍历孩子)

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

    编辑:您需要在 xml 中进行设置

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

    【讨论】:

    • 正是我需要的。我知道它必须简单,只是在文档中错过了它;p 谢谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多