Android SeekBar在没有触摸的情况下状态变为按下状态

6
这是我的布局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。我认为它的状态变成了 pressed。
这是一个 bug 吗?如何处理?

我看到你在我回答之后又提出了3个问题。如果我的回答对你有帮助,请接受答案,这样我们都可以获得声望值。如果没有帮助,请告诉我你遇到的问题。 - Dave S
2个回答

15

只需设置

 android:clickable="true"
 android:focusable="true"
针对您的拖动条

1
这解决了我的问题,谢谢Vadim!! - user1090751

3
ViewGroups在可点击时似乎会将它们的状态传递给它们的子视图,就像在这个问题中所看到的: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

处理ViewGroup中的触摸事件需要特别注意,因为ViewGroup通常会有子视图,这些子视图的触摸事件与ViewGroup本身的不同。为了确保每个视图都正确地接收到其预期的触摸事件,请重写onInterceptTouchEvent()方法。

所以看起来这是预期的行为。如果您想避免这种行为,看起来您需要重写ViewGroupRelativeLayout)或使用一个不是SeekBar父级的View


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接