图库/ AdapterView儿童可绘制状态

我正在使用一个图库视图,其中对应于每个项目的视图是非平凡的,由文本以及多个button组成。

当我点击拖动图库视图(不在其中一个button上的某个地方)时,button的可绘制状态改变为按下,并且好像当前所有button都被按下了一样。 此外,所选状态也会发生相同的行为(例如,子视图的所有文本都会改变颜色)。

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

有任何想法吗?

Solutions Collecting From Web of "图库/ AdapterView儿童可绘制状态"

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

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

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

不知道duplicateParentState属性在什么地方发挥作用,但是突破源代码显示它在选定状态和按下状态中从不考虑。 我会创build一个自定义视图类,并重写dispatchSetSelected和dispatchSetPressed方法。

如果您碰巧从图库扩展到创build您自己的定制版本,您可以简单地执行:

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

这仍然允许自定义画廊的孩子正确接收点击事件,并按照预期进行滑动/滑动。