检测 Android 中对话框窗口的点击

发布于 2024-11-29 20:06:35 字数 496 浏览 1 评论 0原文

我有一个对话框:

final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.location_dialog);
dialog.setTitle("My dialog");
dialog.setMessage("My dialog's content");
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.show();

我希望能够检测对话框线上方和线外的触摸。 我可以使用内置方法轻松检测对话框区域之外的任何触摸,

dialog.setCanceledOnTouchOutside(true);

但是如何检测该区域内的触摸呢? 仅检测红色区域的触摸。

I have a dialog:

final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.location_dialog);
dialog.setTitle("My dialog");
dialog.setMessage("My dialog's content");
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.show();

I want to be able to detect touches over and outside the dialog box's lines.
I can easily detect any touches outside the dialog box area with the build-in method

dialog.setCanceledOnTouchOutside(true);

But how can I detect the touches inside this area?
detect touches only in the area in red.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉生梦死 2024-12-06 20:06:35

创建 Dialog 的扩展并覆盖必要的方法: dispatchTouchEventonTouchEvent (来自文档:这对于处理发生在窗口边界之外的触摸事件最有用,因为没有视图可以接收它。)

更新:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Rect dialogBounds = new Rect();
    getWindow().getDecorView().getHitRect(dialogBounds);

    if (dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
        Log.d("test", "inside");
    } else {
        Log.d("test", "outside");
    }
    return super.dispatchTouchEvent(ev);
}

Create an extension of Dialog and override necessary method: dispatchTouchEvent or onTouchEvent (From docs: This is most useful to process touch events that happen outside of your window bounds, where there is no view to receive it.)

Updated:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Rect dialogBounds = new Rect();
    getWindow().getDecorView().getHitRect(dialogBounds);

    if (dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
        Log.d("test", "inside");
    } else {
        Log.d("test", "outside");
    }
    return super.dispatchTouchEvent(ev);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文