compose——底部弹窗BottomSheetScaffold和ModalBottomSheetLayout

一、底部弹窗BottomSheetScaffold

效果图:

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun BottomSheetExample() {
    val scaffoldState = rememberBottomSheetScaffoldState()
    val bottomSheetState = scaffoldState.bottomSheetState

    val scope = rememberCoroutineScope()

    BottomSheetScaffold(
        scaffoldState = scaffoldState,
        sheetContent = {
            Column(modifier = Modifier.padding(16.dp).height(300.dp)) {
                Text(text = "This is a bottom sheet")
                Button(
                    onClick = {
                        // 处理按钮点击事件
                        scope.launch { bottomSheetState.collapse() }
                    },
                    modifier = Modifier.padding(top = 16.dp)
                ) {
                    Text(text = "关闭")
                }
            }
        },
        sheetPeekHeight = 0.dp
    ) {
        // 页面内容
        Button(
            onClick = { scope.launch { bottomSheetState.expand() } },
            modifier = Modifier.padding(16.dp)
        ) {
            Text(text = "打开底部表单")
        }
    }
}

二、底部弹窗ModalBottomSheetLayout

ModalBottomSheetLayout 是 Jetpack Compose 中的一个组件,用于创建底部弹窗。它可以在屏幕底部显示一个半透明的背景,并从底部滑出一个内容面板。ModalBottomSheetLayout 包含两个主要部分:背景和内容面板。

效果图:

代码如下:

val modalBottomSheetState = rememberModalBottomSheetState(initialValue = ModalBottomSheetValue.Hidden )
    val coroutineScope =rememberCoroutineScope()
    Column {
        // 使用ModalBottomSheetLayout包装BottomSheet的内容
        ModalBottomSheetLayout(
            sheetState = modalBottomSheetState,
            sheetContent = {
                // BottomSheet的内容
                Column {
                    Text("BottomSheet Content")
                    Button(onClick = { coroutineScope.launch { modalBottomSheetState.hide() } }) {
                        Text("Close BottomSheet")
                    }
                }
            }
        ) {
            // 主要内容
            Button(onClick = {
                Log.e("TAG","TTTTT")
                coroutineScope.launch { modalBottomSheetState.show() } }) {
                Text("弹出 BottomSheet")
            }
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Compose弹窗中添加搜索功能,你可以使用Compose UI库和Compose框架来实现。下面是一个示例代码: ```kotlin import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @Composable fun SearchDialog( onSearch: (String) -> Unit, onDismiss: () -> Unit ) { var searchText by remember { mutableStateOf("") } Dialog( onDismissRequest = { onDismiss() }, content = { Box(modifier = Modifier.padding(16.dp)) { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { TextField( value = searchText, onValueChange = { searchText = it }, label = { Text("搜索") }, modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(16.dp)) Button( onClick = { onSearch(searchText) }, modifier = Modifier.align(Alignment.End) ) { Text("搜索") } } } } ) } @Composable fun App() { var isDialogVisible by remember { mutableStateOf(false) } Column(modifier = Modifier.padding(16.dp)) { Button(onClick = { isDialogVisible = true }) { Text("打开弹窗") } if (isDialogVisible) { SearchDialog( onSearch = { query -> // 执行搜索逻辑 // ... isDialogVisible = false }, onDismiss = { isDialogVisible = false } ) } } } @Composable fun MyApp() { MaterialTheme { App() } } fun main() { androidx.compose.ui.window.Window(onCloseRequest = ::exitApplication) { MyApp() } } ``` 在上述示例代码中,我们首先定义了一个`SearchDialog`的Composable函数,该函数接受一个`onSearch`回调和一个`onDismiss`回调作为参数。`SearchDialog`中包含一个文本输入框和一个搜索按钮。 然后,在`App`函数中,我们使用`remember`来创建一个可观察状态`isDialogVisible`,表示弹窗是否可见。当点击按钮时,设置`isDialogVisible`为`true`,弹窗将会显示。 最后,在`MyApp`函数中,我们使用Compose UI库中的`MaterialTheme`来包装整个应用,并在`main`函数中创建窗口并运行应用。 你可以根据自己的需求对样式和功能进行调整,并在搜索按钮点击事件中执行实际的搜索逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值