如何为父容器和所有子容器添加一个单击侦听器?

时间:2016-07-23 12:08:05

标签: java android android-layout onclicklistener

我在我的一个布局中有一个视图层次结构如下(简化的XML以使问题清楚):

<LinearLayout 
   android:id="@+id/top_container"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical">   
        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginBottom="8dp"
                >  
               // 2 childern here  
         </LinearLayout>  
         <RelativeLayout
            android:id="@+id/inner_layout"
            android:layout_width="match_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:layout_height="180dp"
            >
           // children here   
         </RelativeLayout>  
</LinearLayout>   

我想点击此视图中的任意位置执行操作。
top_container上添加点击监听器不起作用,除非我点击顶部某处我没有触及任何子视图的地方。
有没有办法做到这一点,而无需向所有子项添加点击监听器(这将调用相同的处理程序)?

更新
在FrameLayout中包装所有内容并没有解决它。如果我单击RelativeLayout中的任何位置,则单击侦听器仍未被触发

1 个答案:

答案 0 :(得分:1)

将所有内容包裹在RelativeLayout中,并将空的FrameLayout置于所有视图之上,例如:

    <RelativeLayout>
      <Your views....>

      <FrameLayout 
         android:id="@+id/top_layer"
         android:layout_width="match_parent"
         android:layout_height ="match_parent"/>

    </RelativeLayout>

and then:

findViewById(R.id.top_layer).setOnClickListener(....)

如果您想在下面的图层(对您的观看次数)传递点击事件,则可以使用addOnItemTouchListener代替ClickListener