我正在使用一个图库视图,其中每个项目对应的视图非常重要,包含文本和多个按钮。
当我单击拖动图库视图(某个地方没有其中一个按钮)时,按钮的可绘制状态变为按下并显示为当前正在按下所有按钮。此外,所选状态也会出现相同的行为(例如,子TextView的所有文本都会更改颜色)。
我试图阻止此行为,并找到了android:duplicateParentState xml属性以及setDuplicateParentStateEnabled属性。这似乎应该完成我想做的事情,但似乎没有效果。
有什么想法吗?
答案 0 :(得分:8)
也许有点迟到了,但最近我遇到了这个问题,我有一个修复。
dispatchSetSelected和dispatchSetPressed在这里没有真正帮助,因为您实际需要覆盖的方法在Gallery中是私有的。
解决方案是在子视图周围添加一个额外的布局(我使用了LinearLayout的子类),它覆盖了setPressed(boolean)并简单地忽略它。这可以防止画廊强迫孩子按下它的状态,同时仍然可以直接激活这些孩子,而不是阻止事件向上传播。
答案 1 :(得分:3)
不确定duplicateParentState属性在何处发挥作用,但突破源表明它从未被考虑用于所选和按下的状态。我想创建一个自定义视图类并重写dispatchSetSelected和dispatchSetPressed方法。
答案 2 :(得分: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;
}
这仍然允许自定义图库的孩子正确接收点击事件,并且滑动/投掷按预期工作。