gpt4 book ai didi

Android Window Manager 阻止系统返回键

转载 作者:行者123 更新时间:2023-12-03 13:42:29 28 4
gpt4 key购买 nike

我有一个类似于 Facebook 聊天气泡的 float View ,但与它不同的是,我的叠加层有一个 EditText 并且需要可聚焦。

这是我的 float View 代码

        //Inflate the floating view layout we created
mFloatingView = LayoutInflater.from(this).inflate(R.layout.floating_widget_layout, null);

//Add the view to the window.
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);

//Specify the view position
params.gravity = Gravity.TOP | Gravity.START; //Initially view will be added to top-left corner
params.x = 0;
params.y = 100;

//Add the view to the window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingView, params);

这几乎没问题,但有一个问题。当我从 创建覆盖时服务 , 系统后退按钮不起作用。如果我使用 FLAG_NOT_FOCUSABLE系统按钮; home、recents 和 back 按预期工作。我在 SO 做了一些研究,发现这是一个安全问题,所以我开始寻找替代解决方案,发现 this然后更改了我的代码
// Wrapper for intercepting System/Hardware key events
ViewGroup wrapper = new FrameLayout(this) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
Log.v("Back", "Back Key");
return true;
}
return super.dispatchKeyEvent(event);
}
};

//Inflate the floating view layout we created
mFloatingView = LayoutInflater.from(this).inflate(R.layout.floating_widget_layout, wrapper);

//Add the view to the window.
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);

//Specify the view position
params.gravity = Gravity.TOP | Gravity.START; //Initially view will be added to top-left corner
params.x = 0;
params.y = 100;

//Add the view to the window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingView, params);

现在我可以从我的 float View 中获得回压,但是如何将此事件(回压)传递给前台应用程序(其他应用程序,不是我的)?我找到了 this但这对我没有帮助

如果有人可以帮助我或至少提供线索,我将不胜感激

总结

我有一个覆盖 View ,它需要可聚焦,但是当它可聚焦时后按按钮不起作用我该如何解决这个问题?

最佳答案

这个教程好像有解决办法:https://www.geeksforgeeks.org/how-to-make-a-floating-window-application-in-android/
他们设置FLAG_NOT_FOCUSABLE最初是为了让覆盖不会干扰系统返回功能等。他们在 EditText 上设置 onTouch 监听器并将标志更新为 FLAG_NOT_TOUCH_MODAL此时可以输入文本。

关于Android Window Manager 阻止系统返回键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46457563/

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