Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在任何时候点击视图时调用方法Android-Java_Java_Android_Onclicklistener_Gesture - Fatal编程技术网

在任何时候点击视图时调用方法Android-Java

在任何时候点击视图时调用方法Android-Java,java,android,onclicklistener,gesture,Java,Android,Onclicklistener,Gesture,有没有办法在活动中发生触摸时调用方法并获取其id 我有一个自定义视图,我将其添加到相对布局中,然后每当点击在该自定义视图之外注册时,我都希望隐藏该自定义视图。最好的办法是什么 我尝试向相对布局中添加一个onClickListner,但没有成功,因为它只在相对布局上注册点击,所以当我点击作为相对布局子级的textview时,它没有被调用。由于自定义视图和相对布局有时会重叠,当我点击自定义视图时,它会注册为点击相对布局 谢谢一种方法是添加一个透明的空视图让我们给它一个id overlayView,它

有没有办法在活动中发生触摸时调用方法并获取其id

我有一个自定义视图,我将其添加到相对布局中,然后每当点击在该自定义视图之外注册时,我都希望隐藏该自定义视图。最好的办法是什么


我尝试向相对布局中添加一个onClickListner,但没有成功,因为它只在相对布局上注册点击,所以当我点击作为相对布局子级的textview时,它没有被调用。由于自定义视图和相对布局有时会重叠,当我点击自定义视图时,它会注册为点击相对布局


谢谢

一种方法是添加一个透明的空视图让我们给它一个id overlayView,它覆盖了布局中的所有内容,除了您想要隐藏的视图让我们给它一个id羞涩:

这段代码假设您有一个mBashfulView变量,该变量引用了bashful视图

只有当用户触及害羞视图之外的任何位置时,才会调用侦听器。

我强烈建议使用dispatchTouchEvent。这是一个活动可以覆盖的函数,其签名为public boolean dispatchTouchEventMotionEvent ev,它将截获屏幕上的所有触摸事件。在该功能中,您将能够决定如何处理触摸事件。如果您确定不想做任何特殊的事情,并且应该允许用户的触摸正常进行,只需调用super.dispatchTouchEventev

一些文件:

我尝试在相对布局中添加一个onclustner,但没有成功。-请发布您的代码并解释哪些不起作用。将onClickListener添加到您的RelativeLayout以隐藏您的自定义视图。这将使单击自定义视图也隐藏它,因此将onClickListener添加到自定义视图只是为了截获单击事件。@Gudin如果我将侦听器添加到自定义视图,我如何知道何时有点击到自定义视图外部以隐藏它?向顶视图添加另一个侦听器,例如代表整个屏幕的相对布局。@Gudin我最初做的是向相对布局添加一个点击侦听器
<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>
@Override
public boolean onTouch(View v, MotionEvent event) {
    mBashfulView.setVisibility(View.GONE);
}