【问题标题】:Gallery/AdapterView Child Drawable StateGallery/AdapterView 子可绘制状态
【发布时间】:2011-04-20 23:15:30
【问题描述】:

我正在使用画廊视图,其中与每个项目对应的视图是非平凡的,由文本和多个按钮组成。

当我单击以拖动图库视图(不在某个按钮上的某个位置)时,按钮的可绘制状态更改为已按下,并且看起来好像所有按钮当前都被按下。此外,选定状态也会发生相同的行为(例如,子 TextView 的所有文本都会更改颜色)。

我试图阻止这种行为,并找到了 android:duplicateParentState xml 属性以及 setDuplicateParentStateEnabled 属性。这似乎应该完成我想要做的事情,但它似乎没有效果。

有什么想法吗?

【问题讨论】:

    标签: android gallery viewstate drawable android-adapterview


    【解决方案1】:

    也许有点晚了,但最近我自己遇到了这个问题,我有一个解决办法。

    dispatchSetSelected 和 dispatchSetPressed 在这里并没有真正的帮助,因为您实际需要覆盖的方法在 Gallery 中是私有的。

    解决方案是在子视图周围添加一个额外的布局(我使用了 LinearLayout 的子类),它覆盖 setPressed(boolean) 并简单地忽略它。这可以防止画廊将其按下状态强加给子级,同时仍然允许直接激活这些子级,并且不会阻止事件向上传播。

    【讨论】:

    • 惊人的修复!有谁知道这是否是android的报告错误?似乎不是真正的预期行为。
    【解决方案2】:

    不确定 duplicateParentState 属性在哪里发挥作用,但突破源代码表明它从未考虑到选择和按下状态。我会创建一个自定义视图类并覆盖 dispatchSetSelected 和 dispatchSetPressed 方法。

    【讨论】:

      【解决方案3】:

      如果您碰巧从 Gallery 扩展来创建自己的自定义版本,您可以这样做:

        @Override
        public boolean onDown(MotionEvent e) {
          // Ignore onDown events in order to avoid having every child's state set to 'pressed'
          return true;
        }
      

      这仍将允许自定义库的子级正确接收点击事件,并按预期进行滑动/投掷。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2012-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多