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

问题描述 投票:3回答:1

我想在手机上的任何应用程序的所有屏幕上显示浮动布局,我可以在此布局上执行操作,除了在此布局旁边运行的其他应用程序可以接收它自己的操作和事件

这是一个应用程序,做我想要的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);

结果是:布局已经绘制并且可以获得触摸事件,但是当布局显示在屏幕上时,“主页”,“后退”和“最近”应用程序按钮不起作用或对任何应用程序产生任何影响。

所以仍然没有实现我想要的。

这是我正在处理的源代码和存储库,所以你可以查看我的源代码https://github.com/mmelsabry/FloatingLayout

我知道Floating widget / Overlay on Android launcher还有另外一个问题

但它没有帮助

android android-layout android-service android-windowmanager
1个回答
0
投票

尝试使用TYPE_SYSTEM_OVERLAY而不是TYPE_SYSTEM_ALERT。

© www.soinside.com 2019 - 2024. All rights reserved.