Compose笔记(二十六)--DatePicker

        这一节主要了解一下Compose中的DatePicker,DatePicker是一个用于选择日期的组件,它提供了直观的界面让用户可以通过日历视图或直接输入来选择年、月、日。我们在开发中时常会用到日期选择器,简单总结如下:

API:

DatePickerDialog
onDismissRequest:当用户想要关闭对话框时会触发这个回调函数。
confirmButton:用于定义对话框中确认按钮的 UI 和行为。
dismissButton:用于定义对话框中取消按钮的 UI 和行为。
modifier:可对对话框的布局和外观进行修改。
shape:能设置对话框的形状,例如圆角。
backgroundColor:可设置对话框的背景颜色。
contentColor:能设置对话框内容的颜色。

DatePicker
state:用于管理 DatePicker 的状态,像选中的日期、显示模式等都由它管理。
showMode:可设置日期选择的显示模式,有Calendar(日历模式)和Input(输入模式)两种。
modifier:可对 DatePicker 的布局和外观进行修改。
yearsRange:用于设置可选择的年份范围。
initialDateMillis:能设置 DatePicker 初始显示的日期。
onDateSelected:当用户选择日期时会触发这个回调函数。
colors:可自定义 DatePicker 的颜色,例如选中日期的颜色、标题的颜色等。

栗子:

import androidx.compose.material3.Button
import androidx.compose.material3.DatePicker
import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.rememberDatePickerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SimpleDatePickerExample() {val context = LocalContext.currentval datePickerState = rememberDatePickerState()val showDatePicker = remember { mutableStateOf(false) }val selectedDate = remember { mutableStateOf("") }Button(onClick = { showDatePicker.value = true }) {Text("选择日期")}if (selectedDate.value.isNotEmpty()) {Text("已选择日期: ${selectedDate.value}")}if (showDatePicker.value) {DatePickerDialog(onDismissRequest = { showDatePicker.value = false },confirmButton = {TextButton(onClick = {val formatter = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())selectedDate.value = datePickerState.selectedDateMillis?.let {formatter.format(Date(it))} ?: "未选择日期"showDatePicker.value = false}) {Text("确定")}},dismissButton = {TextButton(onClick = { showDatePicker.value = false }) {Text("取消")}}) {DatePicker(state = datePickerState)}}
}
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.Button
import androidx.compose.material3.DatePicker
import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SelectableDates
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.rememberDatePickerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.DialogProperties
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date
import java.util.Locale@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DatePickerExample() {var showDatePicker by remember { mutableStateOf(false) }
//    val datePickerState = rememberDatePickerState()val selectedDateText = remember { mutableStateOf("") }val today = remember {val calendar = Calendar.getInstance()calendar.set(Calendar.HOUR_OF_DAY, 0)calendar.set(Calendar.MINUTE, 0)calendar.set(Calendar.SECOND, 0)calendar.set(Calendar.MILLISECOND, 0)calendar.timeInMillis}val datePickerState = rememberDatePickerState(initialSelectedDateMillis = today,selectableDates = object : SelectableDates {override fun isSelectableDate(utcTimeMillis: Long): Boolean {return utcTimeMillis >= today}override fun isSelectableYear(year: Int): Boolean {val currentYear = Calendar.getInstance().get(Calendar.YEAR)return year >= currentYear && year <= currentYear + 10 // 未来10年}})Column(Modifier.padding(16.dp)) {// 显示选中的日期Text(text = if (selectedDateText.value.isNotEmpty()) {"选中的日期: ${selectedDateText.value}"} else {"请选择日期"},modifier = Modifier.padding(bottom = 16.dp))// 触发日期选择器的按钮Button(onClick = { showDatePicker = true }) {Text("选择日期")}if (showDatePicker) {DatePickerDialog(onDismissRequest = { showDatePicker = false },confirmButton = {Button(onClick = {val selectedDate = datePickerState.selectedDateMillisif (selectedDate != null) {selectedDateText.value = formatDate(selectedDate)}showDatePicker = false}, modifier = Modifier.wrapContentSize()) {Text("确定")}},modifier = Modifier,dismissButton = {TextButton(onClick = { showDatePicker = false }, modifier = Modifier.wrapContentSize()) {Text("取消")}}, properties = DialogProperties(usePlatformDefaultWidth = false)){DatePicker(state = datePickerState,modifier = Modifier.fillMaxWidth(), showModeToggle = false)}}}
}// 日期格式化工具方法
private fun formatDate(timestamp: Long): String {val date = Date(timestamp)return SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(date)
}

注意:
1. 日期格式与本地化处理
DatePickerState.selectedDateMillis获取的是时间戳,需手动转换为可读格式(如 "YYYY-MM-DD")。

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

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

相关文章

【靶场】upload-labs-文件上传漏洞闯关

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.第一关1.保存html页面2.修改页面html3.访问修改后的本地html文件4.上传php文件5.访问上传的php2.第二关1.抓上传包修改文件类型2.上传成功3.第三关1.phtml php3会被解析为php原理2.上传成功4…

基于 Transformer RoBERTa的情感分类任务实践总结之四——PGM、EMA

整合了以下五大核心技术&#xff1a;R-Drop、PGM 对抗训练、EMA、标签平滑、CosineAnnealing 学习率调度。 1. R-Drop&#xff08;Regularized Dropout&#xff09; 原理&#xff1a;同一个样本做两次前向传播&#xff08;同 dropout mask&#xff09;&#xff0c;计算两次输…

录制mp4 rospy

ros 预览摄像头 #!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2# 初始化 bridge bridge CvBridge()def image_callback(msg):# 将ROS图像消息转换为OpenCV图像cv_image bridge.imgmsg_to_cv2(msg, desir…

超简单部署离线语音合成TTS和语音识别

一篇文章讲清楚超简单 离线语音合成TTS 和 离线语音识别 系统部署 本文只介绍两个轻量级的 语音合成用piper, 语音识别用vosk 部署简单,效果勉强 语音合成 推荐 piper (其他没用过) 安装 linux下安装 pip install piper-tts下载模型(63M) 中文模型下载 zh_CN-huayan-medi…

【算力网】

一、算力网-DNS 1.1、核心架构设计 1.1.1 设计框架 基于SRv6的智能DNS算法设计框架&#xff0c;结合IPv6路由可编程性、动态路径优化及业务感知能力&#xff0c;实现网络性能与用户体验的双重提升&#xff1a;​ ​SRv6-DNS融合架构​ ​控制平面​&#xff1a; DNS服务器集…

shell分析nginx日志的指令

shell指令 查看有多少个IP访问&#xff1a; awk {print $1} log_file|sort|uniq|wc -l 查看某一个页面被访问的次数&#xff1a; grep "/index.php" log_file | wc -l 查看每一个IP访问了多少个页面&#xff1a; awk {S[$1]} END {for (a in S) print a,S[a]} …

CMS软件以及常见分类

CMS&#xff08;Content Management System&#xff0c;内容管理系统&#xff09;是 让非技术人员也能便捷创建、编辑、管理网站内容的软件 &#xff0c;核心是 分离 “内容” 和 “页面设计”&#xff08;内容存在数据库&#xff0c;页面用模板生成&#xff09;&#xff0c;无…

Spring @Value 典型用法

典型用法 注入常量值 Value("Hello World") private String message;注入配置文件中的属性值&#xff08;如 application.properties&#xff09; // 假设你有如下配置&#xff1a; app.nameMyApp app.version1.0.0// Java 类中使用&#xff1a; Value("${ap…

golang -- map实现原理

目录 一、前言二、结构1. hmap(map) 结构2. bmap(buckets) 结构 三、哈希冲突四、负载因子五、哈希函数六、扩容增量扩容等量扩容 一、前言 在现代编程语言中&#xff0c;map 是一种非常重要的数据结构&#xff0c;广泛用于存储和快速查找键值对。Go 语言中的 map 是一种高效且…

Vue2 Extends 继承机制与组件复用实践

extends在某些场景下依然发挥作用&#xff0c;如Options API。子组件将继承父组件的属性、方法、生命周期钩子函数以及混合&#xff08;mixins&#xff09;等选项。 注意&#xff1a;子组件可以覆盖、或继承扩展父组件的选项。子组件的生命周期钩子和父组件的钩子一起执行。 &l…

openSUSE MicroOS不可变Linux

openSUSE MicroOS不可Linux 1、openSUSE MicroOS简介安装时可能遇到的问题 2、ssh登录3、openSUSE MicroOS配置国内软件源4、系统变更openSUSE MicroOS安装软件包方法1&#xff1a;进入事务性更新模式安装软件包方法2&#xff1a;继续快照id基于这个快照进行增量安装方法3&…

建站SEO优化之站点地图sitemap

文章目录 编写规范小型网站站点地图小型网站规范示例站点地图说明 大型网站站点地图大型网站规范示例以豆瓣站点地图为例 近期文章&#xff1a; 个人建站做SEO网站外链这一点需要注意&#xff0c;做错了可能受到Google惩罚一文搞懂SEO优化之站点robots.txt网页常见水印实现方式…

Java分层开发必知:PO、BO、DTO、VO、POJO概念详解

目录 引言一、核心概念与定义1、PO&#xff08;Persistent Object&#xff0c;持久化对象&#xff09;2、BO&#xff08;Business Object&#xff0c;业务对象&#xff09;3、DTO&#xff08;Data Transfer Object&#xff0c;数据传输对象&#xff09;4、VO&#xff08;View O…

Linux下OLLAMA安装卡住怎么办?

网络环境不理想&#xff0c;经常在官方的linux安装脚本执行时卡住&#xff0c;其实主要是下载文件卡住&#xff0c;于是我想到了是否可以把其中下载的过程显化、分步&#xff0c;这样更可控&#xff0c;于是修改了官方的install.sh #!/bin/sh # This script installs Ollama o…

C++面试(5)-----删除链表中指定值的节点

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 给定一个单向链表的头节点 head 和一个特定值 val&#xff0c;要求编写一个函数来删除链表中所有值等于 val 的节点&#xff0c;并返回修改后的链表头节点。 示例&#xff1a; 输…

如何用AI赋能学习

由于博主是大学生&#xff0c;今天花费了大量的时间去进行期末的复习&#xff0c;不过从复习中得到了一些学习的灵感&#xff0c;即&#xff1a;如何用AI赋能学习 当我们需要掌握一门新的技能的时候&#xff0c;我们很容易的想到三种办法&#xff1a;买书自己学&#xff0c;报…

【threejs】每天一个小案例讲解:常见材质

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 1. MeshBasicMaterial&#xff08;基础网格材质&#xff09; • 特…

springboot后端与鸿蒙的结合

软件&#xff1a;鸿蒙devceo3.1&#xff0c;springboot项目采用IDEA 目的&#xff1a; 1、结合springboot后端与鸿蒙的结合运用。 2、Log日志查看console语句的信息。 3、引入 import http from ohos.net.http。 4、调用springboot后端提供的链接发送post 5、TextInput的…

minio集群通过mc mirror命令进行定时备份,支持X86和arm两种架构

文章目录 前言一、思路二、使用步骤1.下载mc二进制文件2.手动测试备份命令3.配置定时任务4.成功截图 总结 前言 通过mc mirror命令对minio集群进行定时备份。 一、思路 通过mc mirror命令配合crond定时任务进行周期性的备份 二、使用步骤 1.下载mc二进制文件 wget https:…

三大能力升级,为老项目重构开辟新路径

在软件技术飞速迭代的今天&#xff0c;老项目重构是开发者们绕不开的难题。接口实现缺失、业务逻辑矛盾、架构规划偏离等问题如同拦路虎&#xff0c;让重构工作举步维艰。而传统的 AI 辅助方式&#xff0c;因未充分关联项目实际情况&#xff0c;犹如 “空中造楼”&#xff0c;难…