3

我想让一个浮动布局出现在手机上任何应用程序的所有屏幕上,我可以在这个布局上进行操作,除了在这个布局旁边运行的其他应用程序可以接收它自己的操作和事件

这是一个应用程序,可以满足我的需求https://play.google.com/store/apps/details?id=com.ninja.sms

这是我一直在研究的方法:我使用 WindowManager 来绘制布局,并使用服务来管理此布局。

我使用了以下库https://github.com/t0mm13b/TouchSoftly 但它有一些问题 1. 布局不接收动作或触摸事件,动作转到该库绘制的视图下的视图。2. 启动服务的activity终止后布局消失。

因此,我在以下代码段中对其进行了一些自定义

    _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 启动器

但这无济于事

4

1 回答 1

0

尝试使用 TYPE_SYSTEM_OVERLAY 而不是 TYPE_SYSTEM_ALERT。

于 2015-05-07T08:56:35.947 回答