Вопрос по android, events – Как запустить событие, когда кто-то нажимает в любом месте экрана в приложении для Android?

23

Как я могу поймать событие, когда происходит щелчок где-то на экране приложения? Не имеет значения, есть ли кнопка или что-то еще. Мне просто нужно применитьonClick() прослушиватель событий на весь экран приложения.
Как это сделать?

Ваш Ответ

6   ответов
0

вы можете добавить слушателя к экземпляру Layout, получив макет с

RelativeLayout l = (RelativeLayout)findViewById(R.id.mylayout);
l.setOnClickListener(click);
2

Activity& APOS; sdispatchTouchEvent(ev: MotionEvent) метод

Посмотрите на этот пример в Котлине. Этот подходwill not affect any onClickListenters в вашем приложении

/**
 * On each touch event:
 * Check is [snackbar] present and displayed
 * and dismiss it if user touched anywhere outside it's bounds
 */
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
    // dismiss shown snackbar if user tapped anywhere outside snackbar
    snackbar?.takeIf { it.isShown }?.run {
        val touchPoint = Point(Math.round(ev.rawX), Math.round(ev.rawY))
        if (!isPointInsideViewBounds(view, touchPoint)) {
            dismiss()
            snackbar = null // set snackbar to null to prevent this block being executed twice
        }
    }

    // call super
    return super.dispatchTouchEvent(ev)
}

Или проверить полныйсуть

1

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

    }
});
5

onUserInteraction в вашемActivity

Просто имейте в виду, что он не сработает, когда пользователи будут фокусироваться наEditTextс иSpinners (возможно, другие виджеты тоже). Но он срабатывает каждый раз, когда пользователь касается экрана или нажимает кнопку.

Но из-за этого нет необходимости встраивать слушателей в свои макеты или писать дополнительные методы для обработки этих слушателей, поэтому я считаю, что это самый беспроблемный способ получить то, что вы хотите.

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) {

    }

 });
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
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
}

Менее раздутый код таким образом :)

Похожие вопросы