我在我的一个布局中有一个视图层次结构如下(简化的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中的任何位置,则单击侦听器仍未被触发
答案 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