JetpackCompose从入门到实战学习笔记7—Dialog的简单使用

news2024/11/28 20:48:34

JetpackCompose从入门到实战学习笔记7—Dialog的简单使用

1.Dialog对话框

Dialog的参数如下:

@Composable
fun Dialog(
 	onDismissRequest: (() -> Unit)?, //关闭对话框的回调
	properties: DialogProperties! = DialogProperties(), //自定义对话框的属性
	content: (@ Compose () -> Unit) ?//对话框的内容    
):Unit

properties 参数定制一些对话框特有的行为:
DialogProperties(
	dismissOnBackPress: Boolean!, //是否在按下系统返回键的时候取消对话框
    dismissOnClickOutside: Boolean!, //是否可以在点击对话框以外的区域取消对话框
    securePolicy: SecurePolicy!,
    userPlatformDefaultWidth: Boolean! //对话框的内容是否需要被限制在平台默认的范围内
)

2.Dialog的简单示例:

    @OptIn(ExperimentalComposeUiApi::class)
    @Composable
    fun dialogDemo() {
        val openDialog = remember {
            mutableStateOf(true)
        }
        val dialogWidth = 300.dp
        val dialogHeight = 100.dp
        if (openDialog.value) {
            Dialog(
                onDismissRequest = { openDialog.value = false },
                properties = DialogProperties(usePlatformDefaultWidth = false),
            ) {
                Box(
                    Modifier
                        .size(
                            dialogWidth,
                            dialogHeight
                        )
                        .background(Color.White)
                        .padding(10.dp),
                    contentAlignment = Alignment.Center
                )
                {
                    Text(text = "这是一个Compose实现的dialog", color = Color.Red)
                }
            }
        }
    }

3.Dialog效果如下:

在这里插入图片描述

4.AlertDialog简介:

AlertDialog组件是Dialog组件的更高级别的封装,同时遵循着Material Design 设计标准。它已经帮我们定位好了标题、内容文本、按钮组的位置。

5.AlertDialog的使用示例:

@Preview
    @Composable
    fun AlertDialogSample() {
        val openDialog = remember { mutableStateOf(true) }
        if (openDialog.value) {
            AlertDialog(
                onDismissRequest = { openDialog.value = false },
                title = { Text(text = "开启位置服务") },
                text = { Text(text = "这将意味着,我们会给您提供精准的位置服务,并且您将接受关于您订阅的位置信息。") },
                confirmButton = {
                    TextButton(
                        onClick = {
                            openDialog.value = false
                        }
                    ) {
                        Text(text = "同意")
                    }
                },
                dismissButton = {
                    TextButton(
                        onClick = {
                            openDialog.value = false
                        }
                    ) {
                        Text(text = "取消")
                    }
                }
            )
        }
    }

6.AlertDialog的实现效果如下:

在这里插入图片描述

7.完整代码如下:

package com.example.composemodifiterdemo

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.AlertDialog
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties

/**
 *@author: njb
 *@date:  2023/2/7 19:27
 *@desc:
 */
class DialogSampleActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            dialogDemo()
            AlertDialogSample()
        }
    }

    @Preview
    @OptIn(ExperimentalComposeUiApi::class)
    @Composable
    fun dialogDemo() {
        val openDialog = remember {
            mutableStateOf(true)
        }
        val dialogWidth = 300.dp
        val dialogHeight = 100.dp
        if (openDialog.value) {
            Dialog(
                onDismissRequest = { openDialog.value = false },
                properties = DialogProperties(usePlatformDefaultWidth = false),
            ) {
                Box(
                    Modifier
                        .size(
                            dialogWidth,
                            dialogHeight
                        )
                        .background(Color.White)
                        .padding(10.dp),
                    contentAlignment = Alignment.Center
                )
                {
                    Text(text = "这是一个Compose实现的dialog", color = Color.Red)
                }
            }
        }
    }

    @Preview
    @Composable
    fun AlertDialogSample() {
        val openDialog = remember { mutableStateOf(true) }
        if (openDialog.value) {
            AlertDialog(
                onDismissRequest = { openDialog.value = false },
                title = { Text(text = "开启位置服务") },
                text = { Text(text = "这将意味着,我们会给您提供精准的位置服务,并且您将接受关于您订阅的位置信息。") },
                confirmButton = {
                    TextButton(
                        onClick = {
                            openDialog.value = false
                        }
                    ) {
                        Text(text = "同意")
                    }
                },
                dismissButton = {
                    TextButton(
                        onClick = {
                            openDialog.value = false
                        }
                    ) {
                        Text(text = "取消")
                    }
                }
            )
        }
    }
}

8.完整的效果预览如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能无障碍轮椅——汇总

文章目录一、设计内容二、控制理论三、材料列表四、控制图五、硬件介绍1、TB6612FNG电机驱动模块2、DX-BT04 2.0蓝牙模块3、MPU6050陀螺仪模块4、电源模块5、520编码器直流减速电机六、PID理论与算法控制七、代码解析八、参考博文一、设计内容 使用 STM32 作为主处理器进行开发…

Web3.0:互联网新阶段

Web3.0 定义:从后端生产关系革新开始。 Web3.0 是结合了去中心化和代币(Token)经济学等概念,基于区块链技术的全新的互联网迭代方向,意在解决 Web2.0 带来的生态不平衡、发展不透明等问题。与 AR/VR 等前端创新相比&am…

oracle外键约束、级联删除

根据约束名称查询:select * from user_constraints t where t.CONSTRAINT_NAME 约束名称举例:字段解析:1、CONSTRAINT_NAME:约束名称。2、CONSTRAINT_TYPE:约束类型。3、TABLE_NAME:约束所在的表。4、R_CO…

FreeModbus RTU 移植指南

FreeModbus 简介 FreeModbus 是一个免费的软件协议栈,实现了 Modbus 从机功能: 纯 C 语言支持 Modbus RTU/ASCII支持 Modbus TCP 本文介绍 Modbus RTU 移植。 移植环境: 裸机Keil MDK 编译器Cortex-M3 内核芯片(LPC1778/88&…

Intel x86_64 PMU简介

文章目录前言一、性能监控概述二、CPUID information三、架构性能监控3.1 架构性能监控 Version 13.1.1 架构性能监控 Version 1 Facilities3.1.2 预定义的体系结构性能事件3.1.3 cmask demo测试参考资料前言 Intel 64 和 IA-32 架构提供了 PMU(Performance Monito…

Oracle Data Guard Apply服务

1. Apply服务介绍 Apply服务自动应用redo到备数据库来保持与主数据库的同步和允许事务一致性访问数据。 缺省情况下,Apply服务等待备redo日志文件进行归档,然后再应用归档日志文件包含的redo。然而,可以启用实时Apply,允许当前的…

CentOS8基础篇2:文件系统

一、文件系统概述 1.文件系统的基本概念 操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。它规定了文件的存储方式及文件索引方式等信息。文件系统主要由三部分组成,分别是与文件管理相关的软件、被管理的文件和实施文件管…

ip-guard如何查看客户端连接的服务器IP地址?

在客户端上通过“运行”输入win.ini打开文件(在目录C:\\Windows\\),可以从里面找到一个字段SIP,比如SIP=3232237616 再将其换算成16进制数为c0a80830

每天10个前端小知识 【Day 8】

前端面试基础知识题 1. Javascript中如何实现函数缓存?函数缓存有哪些应用场景? 函数缓存,就是将函数运算过的结果进行缓存。本质上就是用空间(缓存存储)换时间(计算过程), 常用于…

在CANoe/CANalyzer中给CAN Log.asc/blf文件“瘦身”

案例背景(共7页精讲): 该篇博文将告诉您,如何给离线文件CAN Log.asc/blf文件“瘦身”:批量删除/过滤 CAN Log中,不需要的CAN ID和CAN channel。 目录 1 准备工作 2 插入CAN Filter 3 保存“瘦身” 后的…

一种RK3399+MIPI+FPGA的高速工业相机的设计方案(一)

目 前 , 嵌 入 式 相 机 逐 渐 代 替 了 传 统 相 机 进 入 大 众 的 视 野 , 应 用 在 公 安 刑 侦 、 生 物 医 学和 文 物 保 护 等 诸 多 领 域 。 但 是 随 着 人 们 对 图 像 视 觉 成 像 质 量 追 求 的 提 升 , 图 像 传 感 器 的 特…

ESP32S3系列--SPI主机驱动详解(一)

一、目的SPI是一种串行同步接口,可用于与外围设备进行通信。ESP32S3自带4个SPI控制器外设(Master),其中SPI0/SPI1内部专用,共用一组信号线,通过一个仲裁器访问外部Flash和PSRAM;SPI2/3各自使用一组信号线;开…

【C++】二叉树的前序中序后序非递归实现

文章目录二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历总结二叉树的前序遍历 前序遍历的顺序是根、左、右。任何一颗树都可以认为分为左路节点,左路节点的右子树。先访问左路节点,再来访问左路节点的右子树。把访问左路节点的右子树看成一个子问题…

VUE3 插件的开发和使用

在构建 Vue 项目的过程中,离不开各种开箱即用的插件支持,用以快速完成需求,避免自己造轮子。 在 Vue 项目里,可以使用针对 Vue 定制开发的专属插件,也可以使用无框架依赖的通用 JS 插件,插件的表现形式也是…

51单片机学习笔记_11 蜂鸣器,识简谱,根据简谱编写蜂鸣器代码

蜂鸣器实验 蜂鸣器简单地说,就是电磁线圈和磁铁对振动膜的作用。 单片机的是无源蜂鸣器,不能一直充电,需要外部控制器发送震荡信号,可以改变频率产生不同的音色、音调。 大多数有源蜂鸣器则没有这个效果,有源蜂鸣器…

JavaScript(四)-全面详解(学习总结---从入门到深化)

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 📧如果文章…

JAVA开发(Redis的主从与集群)

现在web项目无处不在使用缓存技术,redis的身影可谓无处不在。但是又有多少项目使用到的是redis的集群?大概很多项目只是用到单机版的redis吧。作为缓存的一块,set ,get数据。用的不亦乐乎。但是对于高可用系统来说,数据…

Tomcat简介

目录 一、Tomcat简介 二、下载安装Tomcat 三、利用Tomcat部署静态页面 一、Tomcat简介 Tomcat是一个HTTP服务器,可以按照HTTP的格式来解析请求来调用用户指定的相关代码然后按照HTTP的格式来构造返回数据。 二、下载安装Tomcat 进入Tomcat官网选择与自己电脑…

电子科技大学人工智能期末复习笔记(二):MDP与强化学习

目录 前言 期望最大搜索(Expectimax Search) ⭐马尔科夫决策(MDP)——offline(超重点) 先来看一个例子 基本概念 政策(Policy) 折扣(Discounting) 如…

Mysql中的事务

1. MyIsam是不支持事务的, InnoDB支持 2.事务的四大特性ACID 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节,而且事务在执行过程中…