儿童ScrollView拦截/阻止/吞咽点击到其父视图

时间:2014-04-04 10:20:55

标签: android scrollview

给出以下布局:

<RelativeLayout
    android:id="@+id/item"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/imageview_item"
        android:layout_width="200dp"
        android:layout_height="150dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:scaleType="fitXY"
        android:adjustViewBounds="false" />

    <ScrollView
        android:id="@+id/scrollview_description"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageview_item"
        android:scrollbars="vertical"
        android:fillViewport="true">

        <TextView
            android:id="@+id/textView_description"
            style="@style/TextDescription"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </ScrollView>

</RelativeLayout>

在代码中我向父/容器relativeLayout添加了一个OnClickListenter。

View itemView = (View) rootView.findViewById(R.id.item);

itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do stuff
    });

如果轻触ImageView,这样可以正常工作,但是如果点击描述ScrollView / TextView区域,OnClickListenter的onClick()方法永远不会被触发,大概是因为ScrollView正在处理/吞下触摸。

如何从ScrollView传递标准点击事件,以确保其父亲RelativeLayout OnClickListenter.onClick()方法触发? (但显然仍然可以滚动ScrollView)

由于

2 个答案:

答案 0 :(得分:0)

声明您的ScrollView non clickable and non focusable将点击事件传递给parentView。

android:clickable="false"
android:focusable="false" 

答案 1 :(得分:0)

ScrollView总是需要一个孩子作为布局。 ScrollView永远不会将直接子视为View。因此,在scrollview中创建一个布局,然后在该布局中添加TextView,如下所示:

我添加了LinearLayout您可以根据自己的选择添加布局。

 <ScrollView
    android:id="@+id/scrollview_description"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/imageview_item"
    android:scrollbars="vertical"
    android:fillViewport="true">

    <LinearLayout
          android:id="@+id/linerlayout"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:orientation="vertical">
    <TextView
        android:id="@+id/textView_description"
        style="@style/TextDescription"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
   </LinearLayout>
</ScrollView>