我想让一个 float 布局出现在手机上任何应用程序的所有屏幕上,我可以在这个布局上进行操作,除了在这个布局旁边运行的其他应用程序可以接收它自己的操作和事件
这是一个可以做我想做的事情的应用程序 https://play.google.com/store/apps/details?id=com.ninja.sms
这是我研究过的方法: 我使用 WindowManager 来绘制布局,并使用服务来管理此布局。
我使用了以下库 https://github.com/t0mm13b/TouchSoftly但它有一些问题 1.布局不接收 Action 或触摸事件, Action 转到由该库绘制的 View 下的 View 。 2. 当启动服务的activity终止时布局消失。
所以,我在下面的代码 fragment 中对其进行了一些定制
_layOutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
_layOutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
_layOutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
_layOutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
if (_layOutParams != null) {
Log.d(TAG, "onCreate() - Got _layOutParams!");
_layOutParams.gravity = Gravity.RIGHT | Gravity.TOP;
} else
Log.d(TAG, "onCreate() - _layOutParams is null! :(");
_hudPageView = _layOutInflater.inflate(R.layout.service_hudpageview, null);
结果是:布局已经绘制并且可以获取触摸事件,但是当布局出现在屏幕上时,Home、Back 和 Recent apps 按钮不起作用或对任何应用程序没有任何影响。
所以还是没有达到我想要的效果。
这是我正在处理的源代码和存储库,因此您可以查看我的源代码 https://github.com/mmelsabry/FloatingLayout
我知道这里还有一个问题Floating widget / Overlay on Android launcher
但是没用
最佳答案
尝试使用 TYPE_SYSTEM_OVERLAY 而不是 TYPE_SYSTEM_ALERT。
关于android - 在 Android 启动器和其他应用程序屏幕上绘制 float 布局并管理此布局的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953706/