Seekbar焦点不想要

时间:2016-09-21 16:49:42

标签: android android-seekbar

我在布局中使用了SeekBar,我有另一个是RelativeLayout的View。

<CoordinatorLayout>

    <RelativeLayout>
    ...
    </RelativeLayout>

    <SeekBar
        android:id="@+id/progressSeekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:progress="70"
        android:progressDrawable="@drawable/player_seek_bar_progress"/>

</CoordinatorLayout>

当我触摸这个RelativeLayout时,SeekBar获得焦点...... 即使在我的代码中,我的布局也没有任何问题...

有人有同样的问题吗?

谢谢你的回答:)

5 个答案:

答案 0 :(得分:3)

我刚才遇到了同样的问题。 我的布局看起来像下面的内容(我省略了本主题的无关视图)。如您所见,父视图(LinearLayout)和SeekBar都具有android:clickable="true"属性。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:clickable="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SeekBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true" />
</LinearLayout>

如何解决? :]

以下是我在#android.view.ViewGroup#dispatchSetPressed的源代码中找到的内容(这是每次用户触摸屏幕时调用的事件)

它遍历每个子视图,如果它符合以下条件,它会将事件传播到此子视图:

if (!pressed || (!child.isClickable() && !child.isLongClickable())) {  
  child.setPressed(pressed); 
}

基本上,如果您的子视图(在这种情况下,SeekBar可以单击或长按,则不会将事件传播给它。 此外,还有一条评论说明如下:

  

可自行点击的儿童不应该按下   他们的父视图的状态。始终清除按下的状态   传播。

此评论所描述的情况与您现在面临的情况相同。如果您将SeekBar设置为可点击,则Android知道必须直接在SeekBar中对点击事件作出反应,并且不会传播该事件。

这对我有用。希望它也适合你。

参考

ViewGroup source code

答案 1 :(得分:0)

<SeekBar
    android:id="@+id/progressSeekBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:progress="70"
    android:progressDrawable="@drawable/player_seek_bar_progress"
    android:focusable="false"/>

答案 2 :(得分:0)

sysfs

您是否尝试过以编程方式设置SeekBar?这似乎对我有用,但将XML属性设置为mSeekBar = (SeekBar) v.findViewById(R.id.progressSeekBar); mSeekBar.setFocusable(false); 却没有。

答案 3 :(得分:0)

只需将其放在根视图中,然后删除根中所有可点击的

android:descendantFocusability="blocksDescendants"

答案 4 :(得分:0)

只需将automatedandroid:clickable="true"设置为SeekBar XML属性。这样做之后,当您单击父布局时,SeekBar将不会获得焦点。

@Kashmir的积分

android:focusable="true"