当SeekBar包裹在一个ViewGroup中时,即使其没有被触摸,它的状态也发生改变

代码类似于这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <SurfaceView
        android:id="@+id/media_page_surface"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true" />
    
    <SeekBar
        android:id="@+id/media_page_seek_bar"
        android:layout_width="match_parent"
        android:maxHeight="3dip"
        android:layout_height="wrap_content"
        android:alignParentBottom="true"
        android:progressDrawable="@drawable/drawable_media_page_seek_bg"
        android:thumb="@drawable/drawable_media_page_seek_thumb" />
</RelativeLayout>

我是在最外层设置了点击事件setOnClickListener(listener),但是设置了之后当手指滑到这个控件的其他地方时,这个SeekBar会变成按下的颜色,但是其位置不会移动?这个是什么情况,要怎么才能解决?

阅读 5k
2 个回答

你想达到的效果是什么?还是你碰到了这个问题想深究其原因?如果你想监听子View的点击事件,就应该对子View设置监听而不是对ViewGroup进行监听,点击事件是独立事件,无法再进行分发。至于点击ViewGroup后SeekBar变色了是因为点击事件同时是会触发触摸事件,触摸事件是默认分发的,触摸事件带来焦点,有了焦点就有了变色。一个题外话,你的相对布局写的不严谨,layout_wight这种线性布局才能生效的属性就不应该出现在相对布局中

viewgroup 的onTouchEvent返回true,表示拦截并处理事件,这样子view就收不到事件通知,也就不会响应事件。另外建议去了解view事件的三个函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏