我有一个SlidingDrawer元素,其中包含一个包含一些Button子元素的RelativeLayout元素:
<SlidingDrawer>
<RelativeLayout>
<LinearLayout>
<Button android:background="@drawable/foo.xml" android:duplicateParentState="false">
<Button android:background="@drawable/bar.xml" android:duplicateParentState="false">
</LinearLayout>
</RelativeLayout>
</SlidingDrawer>
foo.xml和bar.xml具有根据状态应用不同图像的选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/foo_selected" />
<item android:state_pressed="true" android:drawable="@drawable/foo_selected" />
<item android:state_enabled="false" android:drawable="@drawable/foo_disabled" />
<item android:drawable="@drawable/foo_normal" />
</selector>
我看到的问题是,当我点击滑动抽屉手柄时,按钮会触发按下状态,即使我已将duplicateParentState
指定为假,它们也会被按下。
答案 0 :(得分:25)
使用子类重写LinearLayout
类。在该子类中覆盖setPressed
方法,并且不执行任何操作:
public class UnpressableLinearLayout extends LinearLayout
{
@Override
public void setPressed(boolean pressed)
{
// Do nothing here. Specifically, do not propagate this message along
// to our children so they do not incorrectly display a pressed state
// just because one of their ancestors got pressed.
}
}
将LinearLayout
替换为UnpressableLinearLayout
的实例。
答案 1 :(得分:9)
无需将duplicateParentState设置为false。如果您以某种方式使父点击可能会发生这种情况。默认情况下,按下的状态将传播给子项。确保您的LinearLayout和RelativeLayout不可点击。
答案 2 :(得分:0)
与SeekBar情况相同。
设置SeekBar:
android:clickable="true"
android:focusable="true"
为我工作