基于Jetpack Compose的全局悬浮窗框架
- 使用Compose代码描述悬浮窗界面
- ViewModel支持
- 可拖拽悬浮窗支持
- 基于Application Context的对话框组件
- 如果Gradle版本小于7.0,在应用的
build.gradle
中,添加Jitpack仓库
repositories {
maven { url 'https://jitpack.io' }
}
- 如果Gradle版本大于等于7.0,在 settings.gradle 文件中加入
dependencyResolutionManagement {
repositories {
maven { url 'https://jitpack.io' }
}
}
- 添加ComposeFloatingWindow依赖
dependencies {
implementation "com.github.only52607:ComposeFloatingWindow:1.0"
}
在AndroidManifest.xml
中添加
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
val floatingWindow = ComposeFloatingWindow(applicationContext)
floatingWindow.setContent {
FloatingActionButton(
modifier = Modifier.dragFloatingWindow(),
onClick = {
Log.i("")
}) {
Icon(Icons.Filled.Call, "Call")
}
}
floatingWindow.show()
查看示例程序,了解详细用法。
在需要拖拽的组件上使用Modifier.dragFloatingWindow()
修饰符,示例:
FloatingActionButton(
modifier = Modifier.dragFloatingWindow()
) {
Icon(Icons.Filled.Call, "Call")
}
使用LocalComposeFloatingWindow
获取,示例:
val floatingWindow = LocalComposeFloatingWindow.current
当悬浮窗的Context为Application时,在悬浮窗的Compose界面中使用AlertDialog
和Dialog
会出现token is null异常,这时可使用SystemAlertDialog
或SystemDialog
组件,用法与自带的AlertDialog
和Dialog
一致。
示例:
SystemAlertDialog(
onDismissRequest = { showDialog = false },
confirmButton = {
TextButton(onClick = { showDialog = false }) {
Text(text = "OK")
}
},
text = {
Text(text = "This is a system dialog")
}
)
通过调用 viewModel() 函数,从任何可组合项访问 ViewModel。
class MyViewModel : ViewModel() { /*...*/ }
@Composable
fun MyScreen(
viewModel: MyViewModel = viewModel()
) {
// use viewModel here
}
详情请参照Android文档
Apache 2.0 License