Android SeekBar 的状态在不触摸时变为按下状态

Android SeekBar's state become pressed when not touch it

这是可能的布局 xml:

<RelativeLayout
    android:id="@+id/seek_bar_wrapper"
    android:layout_width="match_parent"
    android:layout_height="200dip">

    <SeekBar
        android:id="@+id/seek_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_margin="20dip"
        android:maxHeight="2dip"
        android:minHeight="2dip"
        android:progressDrawable="@drawable/drawable_seekbar_progress"
        android:thumb="@drawable/drawable_seekbar_thumb" />
</RelativeLayout>

我将 OnClickListener 设置为 RelativeLayout。奇怪的是,当我触摸 RelativeLayout 时,SeekBar 的表现就像我按下它一样,当它的状态被按下时,它的拇指变成了 drawable。我认为它的状态变得紧迫。

这是一个错误吗?如何处理?

ViewGroups 似乎将它们的状态传递给它们的 children 当它们可点击时如这个问题所示:View gets its drawable state (pressed, etc...) from its parent

这可能是因为您将 OnClickListener 设置为 RelativeLayout

我的第一个想法是将 Button 作为 SeekBar 的同级放在 SeekBar 后面,并将其用于您的 OnClick 操作。

您也可以覆盖您的 RelativeLayout,并且在 setPressed

上不执行任何操作

Android: Child elements sharing pressed state with their parent even when duplicateParentState specified

根据文档:http://developer.android.com/training/gestures/viewgroup.html

Handling touch events in a ViewGroup takes special care, because it's common for a ViewGroup to have children that are targets for different touch events than the ViewGroup itself. To make sure that each view correctly receives the touch events intended for it, override the onInterceptTouchEvent() method.

看来这是有意为之的行为。如果你想避免这种行为,看起来你需要覆盖 ViewGroup (RelativeLayout) 或使用 View 而不是 parent 到 SeekBar 对于此事件。

刚设置

 android:clickable="true"
 android:focusable="true"

到你的搜索栏