Android Compose 悬浮窗

ops/2024/12/15 20:21:32/

今天需要写一个悬浮窗,但是在 Compose 中显示悬浮窗会遇到生命周期问题,我搜了一下,竟然有博主还要付费才给看,我真的是,开源社会不过是闻道有先后,大家互帮互助才有未来,这样明目张胆的放几张收款码让付款才给看几行代码,至于吗?吃相如此难看!看看源码还是可以翻出来的,这里免费给大家分享,开源万岁!我的文章不要求关注,不要求付费,不要求会员,只求一个点赞认可,感谢各位。

今天遇到的问题是两个报错,相信大家主要难以解决的也是这两个问题:

ViewTreeLifecycleOwner not found from androidx.compose.ui.platform.ComposeView
Composed into the View which doesn’t propagateViewTreeSavedStateRegistryOwner!

解决办法:

implementation("androidx.lifecycle:lifecycle-service:2.5.1")
import android.graphics.PixelFormat
import android.view.WindowManager
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.LifecycleService
import androidx.lifecycle.setViewTreeLifecycleOwner
import androidx.savedstate.SavedStateRegistry
import androidx.savedstate.SavedStateRegistryController
import androidx.savedstate.SavedStateRegistryOwner
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
import com.puremic.karaoke.global.tuning.TuningItemNotifier
import com.puremic.karaoke.ui.theme.PuremicKaraokeThemeclass NotifierService: LifecycleService(), SavedStateRegistryOwner {private val savedStateRegistryController by lazy {SavedStateRegistryController.create(this)}override val savedStateRegistry: SavedStateRegistryget() = savedStateRegistryController.savedStateRegistryoverride fun onCreate() {super.onCreate()savedStateRegistryController.performAttach()savedStateRegistryController.performRestore(null)val windowManager = getSystemService(WindowManager::class.java)val params = WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSLUCENT)val composeView = ComposeView(this).apply {setViewTreeLifecycleOwner(this@NotifierService)setViewTreeSavedStateRegistryOwner(this@NotifierService)setContent {PuremicKaraokeTheme {Notifier()}}}windowManager.addView(composeView, params)}@Composableprivate fun Notifier() {Box(modifier = Modifier.fillMaxSize()) {TuningItemNotifier()}}
}

解决问题的无非就是那三四行代码,祝大家学业有成,步步高升


http://www.ppmy.cn/ops/142196.html

相关文章

【游戏设计原理】8 - 霍华德的隐匿性游戏设计法则

1. 霍华德的隐匿性游戏设计法则 霍华德的隐匿性游戏设计法则的核心思想是:“秘密的重要性与其表面上的无辜性和完整度成正比”。这意味着,当游戏开始时,设计上越是简洁、无害、直观的元素,隐藏的深层意义和转折就会显得更加震撼和…

deepin 安装 hive

deepin 安装 hive 安装 hadoop安装 mysql安装 hive 准备 HDFS配置 vim $HADOOP_HOME/etc/hadoop/core-site.xml <!--配置所有节点的lhz用户都可作为代理用户--><property><name>hadoop.proxyuser.lhz.hosts</name><value>*</value><…

梳理你的思路(从OOP到架构设计)_架构设计的UML图形思考03

目录 1、绘制UML基於类别图 &#xff1a;表达接口(Interface) 接口的表达 Astah操作 接口实现 类 <实现>接口的表达 接口的使用(调用接口的函数) 2、接口的表示 在C裡&#xff0c; 在Java里 1、绘制UML基於类别图 &#xff1a;表达接口(Interface) 接口的表达 …

webrtc学习----前端推流拉流,局域网socket版,一对多

提示&#xff1a;局域网socket版&#xff0c;一对多 文章目录 [TOC](文章目录) 前言一、教程二、webrtc工作流程三、推流端四、拉流五、socket服务六、效果七、备注总结 前言 ‌‌‌‌‌WebRTC&#xff08;Web Real-Time Communication&#xff09;‌是一种实时通讯技术&#x…

“AI数据生成系统:创造数据新动力

嘿&#xff0c;大家好&#xff01;今天咱们来聊聊一个特别火的话题——AI数据生成系统。这玩意儿&#xff0c;听起来可能有点技术范儿&#xff0c;但其实它就像是我们的创意工厂&#xff0c;能源源不断地产出新鲜、有用的数据。 首先&#xff0c;咱们得搞清楚&#xff0c;AI数据…

AI Alignment: A Comprehensive Survey---摘要、简介

题目 人工智能对齐&#xff1a;全面调查 摘要 人工智能对齐旨在使人工智能系统的行为符合人类的意图和价值观。随着人工智能系统的能力不断增强&#xff0c;错位的风险也在不断增加。为了提供对齐领域的全面和最新概述&#xff0c;在本调查中&#xff0c;我们深入研究了对齐的…

Linux系统操作03|chmod、vim

上文&#xff1a; Linux系统操作02|基本命令-CSDN博客 目录 六、chmod&#xff1a;给文件设置权限 1、字母法 2、数字法&#xff08;用的最多&#xff09; 七、vim&#xff1a;代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…

前端 websocket

一、定义和基本概念 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它使得客户端和服务器之间可以进行实时的、双向的数据传输。与传统的 HTTP 请求-响应模式不同&#xff0c;WebSocket 允许服务器主动向客户端推送数据&#xff0c;而不需要客户端先发起请求。这为…