2010-10-04 67 views
7

我正在使用Gallery视图,其中与每个项目对应的视图不平凡,并且包含文本以及多个按钮。Gallery/AdapterView儿童可绘制状态

当我点击拖动图库视图(而不是在某处的一个按钮)按钮的绘制状态更改为压制又仿佛所有的按钮,目前正在按出现。此外,所选状态也会发生相同的行为(例如,子视图TextView的所有文本都会改变颜色)。

我试图阻止这种行为,并已发现了android:duplicateParentState XML属性还有setDuplicateParentStateEnabled财产。这似乎应该完成我想要做的事情,但它似乎没有效果。

任何想法?

回答

3

不知道其中duplicateParentState产权进场,而是通过源突破表明,这是从来没有考虑到所选择的和压制的状态。我会创建一个自定义视图类,并重写dispatchSetSelected和dispatchSetPressed方法。

8

也许有点就在身边晚,但最近刚碰到这个问题,我自己有一个修复。

dispatchSetSelected和dispatchSetPressed真的不帮助这里,因为你确实需要覆盖的方法是内廊私人。

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

+0

This Works。非常感谢! – yuku 2011-01-29 18:36:30

+0

惊人的修复!有谁知道这是否是一个报告的Android错误?似乎不是真正的预期行为。 – MikeIsrael 2012-01-19 15:44:29

1

如果你碰巧从库扩展到创建它自己的定制版本,你可以简单地做:

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

将仍然允许自定义库的孩子正确地接收点击事件,和刷卡/甩按预期工作。