在Android启动器和其他应用程序屏幕上绘制浮动布局,并管理此布局的生命周期

snon 发布于 2019-03-09 android 最后更新 2019-03-09 14:35 0 浏览

我想让浮动布局显示在手机上任何应用程序的所有屏幕上,除了在此布局旁边运行的其他应用程序之外,我可以对此布局执行操作,并可以接收它自己的操作和事件 这里有一个应用程序,它可以完成我想要的https://play.google.com/store/apps/details?id=com.ninja.sms 以下是我所研究的方法: 我使用WindowManager绘制布局,并使用服务来管理此布局。 我使用了以下库https://github.com/t0mm13b/TouchSoftly,但它有一些问题 1.布局没有收到动作或触摸事件,动作会转到该库所绘制的视图下。 2.当发起服务的活动中断时,布局消失。 所以,我在下面的代码片段中对它进行了一些定制

    _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应用程序按钮不起作用,或者在布局出现在屏幕上时对任何应用程序都没有任何影响。 所以仍然没有达到我想要的。 这里是我正在处理的源代码和存储库,所以你可以查看我的源代码 https://github.com/mmelsabry/FloatingLayout 我知道这里有另一个问题Floating widget / Overlay on Android launcher 但它没有帮助
已邀请:

overo

赞同来自:

尝试使用TYPE_SYSTEM_OVERLAY而不是TYPE_SYSTEM_ALERT。