我在布局中使用了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获得焦点...... 即使在我的代码中,我的布局也没有任何问题...
有人有同样的问题吗?
谢谢你的回答:)
答案 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
中对点击事件作出反应,并且不会传播该事件。
这对我有用。希望它也适合你。
答案 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)
只需将automated
和android:clickable="true"
设置为SeekBar XML属性。这样做之后,当您单击父布局时,SeekBar将不会获得焦点。
@Kashmir的积分
android:focusable="true"