gpt4 book ai didi

android - 触摸始终显示在屏幕上的 View

转载 作者:太空宇宙 更新时间:2023-11-03 12:53:22 25 4
gpt4 key购买 nike

我有一个始终显示在屏幕上的 View (在其他应用程序之上),我不想接收触摸事件,也不想将它们传递得更远。

来自正在运行的 Service 的代码:

    WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);

v.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(getApplicationContext(), "view touched", Toast.LENGTH_SHORT).show();
return false;
}
});

WindowManager localWindowManager = (WindowManager)getSystemService("window");
localWindowManager.addView(v, localLayoutParams);

目前我还没有接触到。

最佳答案

您想将您的 View 声明为TYPE_SYSTEM_ALERT,如下所示:

WindowManager.LayoutParams params =
new WindowManager.LayoutParams(width, height, x, y,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.LEFT | Gravity.TOP;

这样它只会响应 View 本身的触摸。

此代码来 self 设计的工作任务切换器。我没有使用 FLAG_WATCH_OUTSIDE_TOUCH,因为它在与覆盖层下方的其他窗口交互时给我带来了问题。


至于将触摸传递给其他应用程序 - 这不再可能,因为它代表着安全风险。

我最近在一个类似的问题上汇总了更多细节,您可能会觉得读起来很有趣:

也是一个有趣的图书馆mentioned by Edward Jezisek是 pingpongboss 的 StandOut:

既然是开源的,大家可以通过代码去了解他在做什么。

关于android - 触摸始终显示在屏幕上的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com