如何检测活动边界外的触摸事件?

3
我有一个A活动在B活动之上。A活动并没有占据整个屏幕。(但它不是对话框活动)我想要当触摸事件被检测到在A活动边界之外时关闭A活动。如何检测活动边界之外的触摸事件?

@Override

public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
        Toast.makeText(getApplicationContext(), "Hi", 3000).show();

        return true;
    }

    return false;
}

这段代码只适用于对话框活动,不能正常工作。请帮忙解决,谢谢!


Activity A没有填满整个屏幕。(虽然不是对话框活动)那它是什么?你可能没有使用全屏,但它占据了整个屏幕。如果超出限制,您可以设置x、y限制并执行此类操作。 - Manmohan Badaya
@manmohan 并不是必须让一个活动占据整个屏幕。...我已经填充了该活动,使其看起来像对话框活动。 - Ashwin Shirva
除了填充之外,您可以为活动选择主题对话框。如果我理解您的意思,那么请问是否有其他活动或其他东西可以使用剩余的空间。假设触摸超出活动边界,那么现在活动将如何获取它。更清楚地说,WindowManager获取所有触摸事件,因为它是整个显示屏的实例。 - Manmohan Badaya
1个回答

1
我不知道这是否有效,请测试一下 :)
但它应该很容易:
在Activity A的onCreate()方法中:
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    //set us to non-modal, so that others can receive the outside touch events.
    getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL);

    //and watch for outside touch events too
    getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);

    //be sure to set the content view after setting those flags!!
    setContentView(R.layout.my_view);
}

现在您可以在普通的`onTouch()`中接收触摸事件
只需检查它是否在外部(获取x和y并检查其是否超出窗口位置)


你为什么要将每个标志都添加两次? - JacksOnF1re

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接