有没有办法让一个方法在一个活动中发生触摸并获得它的id?
我有一个自定义视图,我添加到相对布局,然后只要在自定义视图外注册,我想隐藏自定义视图。什么是最好的方法。
我尝试将oncliecllistner
添加到相对布局但是没有用,因为它只在相对布局上注册了点击,所以当我点击作为相对布局的子项的textview时,它不是调用。由于自定义视图和相对布局在我点击自定义视图时会重叠,因此会将其注册为相对布局的点击
由于
答案 0 :(得分:0)
一种方法是添加一个透明的空View
(让我们给它标识overlayView
),它覆盖布局中的所有内容,除了之外,您想要的视图隐藏(让我们给出身份bashful
):
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!--
All your existing non-bashful Views must be here, *before* overlayView.
That gives them a lower Z-order than overlayView.
-->
<View
android:id="@+id/overlayView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<!-- The bashful View must come last, so that it has the highest Z-order. -->
<View
android:id="@+id/bashful"
...
/>
</RelativeLayout>
然后,在View.OnTouchListener
的{{1}}(不是View.OnClickListener
)中,你可以这样做:
overlayView
此代码假定您有一个引用@Override
public boolean onTouch(View v, MotionEvent event) {
mBashfulView.setVisibility(View.GONE);
}
视图的mBashfulView
变量。
只有当用户触及bashful
视图之外的任何位置时,才会调用侦听器。
答案 1 :(得分:0)
我强烈建议您使用dispatchTouchEvent()
。这是您的活动可以覆盖的功能(具有签名public boolean dispatchTouchEvent(MotionEvent ev)
),它将拦截所有触摸事件到屏幕。在此功能中,您将能够决定如何处理触摸事件。如果您确定不想做任何特别的事情,并且应该允许用户的触摸正常进行,请拨打super.dispatchTouchEvent(ev)
!