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

标签 android android-layout android-service android-windowmanager

我想让一个 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/

相关文章:

android - 如何使用 Compound Drawable 垂直对齐 TextView 中的文本

java - 绑定(bind)服务错误

android - 具有自己进程的 IntentService 中的 ANR

java - 以编程方式发现本地网络设备和 IO

java - 如何查看android类里面有什么?

android - 线性布局或水平 ScrollView 正在切断内容

android - 在应用程序类中绑定(bind) Android 服务是个好主意吗?

android - AudioTrack:从一个线程开始调用

android - 如何使用 Facebook Android SDK 切换授权的 facebook 用户?

java - 使用 Glide 拉伸(stretch)图像以适应 ImageView