Skip to content

Latest commit

 

History

History
132 lines (98 loc) · 2.91 KB

README_CN.md

File metadata and controls

132 lines (98 loc) · 2.91 KB

compose-floating-window

Release License

基于Jetpack Compose的全局悬浮窗框架

效果预览

Preview

特性

  • 使用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")
}

获取当前ComposeFloatingWindow实例

使用LocalComposeFloatingWindow获取,示例:

val floatingWindow = LocalComposeFloatingWindow.current

显示对话框

当悬浮窗的Context为Application时,在悬浮窗的Compose界面中使用AlertDialogDialog会出现token is null异常,这时可使用SystemAlertDialogSystemDialog组件,用法与自带的AlertDialogDialog一致。

示例:

SystemAlertDialog(
    onDismissRequest = { showDialog = false },
    confirmButton = {
        TextButton(onClick = { showDialog = false }) {
            Text(text = "OK")
        }
    },
    text = {
        Text(text = "This is a system dialog")
    }
)

使用ViewModel

通过调用 viewModel() 函数,从任何可组合项访问 ViewModel。

class MyViewModel : ViewModel() { /*...*/ }

@Composable
fun MyScreen(
    viewModel: MyViewModel = viewModel()
) {
    // use viewModel here
}

详情请参照Android文档

License

Apache 2.0 License