如果有人在Android应用中点击屏幕上的任何地方,如何触发事件?

时间:2012-04-12 15:01:06

标签: android events

如何在应用程序屏幕上的某个位置发生点击时捕获事件? 是否有按钮或其他内容无关紧要。我只需要在整个应用程序屏幕上应用onClick()事件监听器。
怎么做?

7 个答案:

答案 0 :(得分:25)

setonclicklistner用于布局文件的主要布局....

像.... main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/mainlayout">
 <!- Your other view->
</Relativelayout>

并为mainlayout设置点击监听器...

 RelativeLayout rlayout = (RelativeLayout) findViewById(R.id.mainlayout);
 rlayout.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

    }

 });

答案 1 :(得分:5)

我认为最简单的方法是覆盖Activity

中的onUserInteraction

请注意,当用户关注/关闭EditTextSpinners(可能还有其他小部件)时,它不会触发。但每次用户触摸屏幕或按下按钮时它都会触发。

但这使得无需在您的布局中构建侦听器或编写其他方法来处理这些侦听器,因此我相信这是获得所需内容的最无故障方法。

答案 2 :(得分:3)

您应该只覆盖preload的{​​{1}}方法


看一下Kotlin中的这个例子。这种方法不会影响您应用中的任何onClickListenters

Activity

或查看完整的gist

答案 3 :(得分:3)

如果您想知道用户单击了屏幕上的任何位置 那么诀窍就是覆盖OnUserUnteraction():

”每当将按键,触摸或轨迹球事件调度到活动时调用。如果您想知道用户在活动运行时已经以某种方式与设备进行了交互,则请实施此方法。此回调和{@link #onUserLeaveHint}旨在帮助活动智能地管理状态栏通知;具体地说,是为了帮助活动确定取消通知的适当时间...。”

public abstract class BaseActivity extends Activity {
...
@Override
public void onUserInteraction() {
    Log.d(DEBUG_TAG,"Touch anywhere happened");
    super.onUserInteraction();
}

一些不活动后,我使用它来设置应用程序屏幕阻止。

答案 4 :(得分:1)

为您的主要布局添加ID,然后

LinearLayout root = (LinearLayout) findViewById(R.id.main_layout);
root.setOnClickListener(new OnClickListener() {
    public void onClick()
    {

    }
});

答案 5 :(得分:0)

也许您可以向Layout实例添加一个侦听器,使用

获取布局
RelativeLayout l = (RelativeLayout)findViewById(R.id.mylayout);
l.setOnClickListener(click);

答案 6 :(得分:0)

您也可以直接从根布局的onClick xml属性设置回调:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:onClick"myMethod">
 <!- Your other view->
</Relativelayout>

在你的活动中:

public void myMethod(View pView) {
  //XXX do something
}

这种不太臃肿的代码:)