7

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

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

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

有任何想法吗?

4

3 回答 3

8

也许有点晚了,但最近我自己遇到了这个问题,我有一个修复。

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

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

于 2011-01-27T12:35:25.717 回答
3

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

于 2010-10-04T20:01:48.710 回答
1

如果您碰巧从 Gallery 扩展来创建您自己的自定义版本,您可以简单地执行以下操作:

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

这仍将允许自定义画廊的孩子正确接收点击事件,并按预期滑动/投掷作品。

于 2012-03-23T01:33:59.013 回答