当前位置: 首页 > news >正文

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.xdnf.cn/news/934885.html

相关文章:

  • LeetCode 1723: 完成所有工作的最短时间
  • 大数据+智能零售:数字化变革下的“智慧新零售”密码
  • LLMs 系列科普文(5)
  • 大模型外挂MCP教程(8): 飞算JavaAI智能分析搭建自己的MCP Server
  • godot小白入门前的一些前置知识了解
  • 深入了解linux系统—— 共享内存
  • BERT
  • 【数据结构】图论基石:最小生成树(MST)实战精解与Prim/Kruskal算法详解
  • LLMs之PE:system-prompts-and-models-of-ai-tools的简介、使用方法、案例应用之详细攻略
  • 掌握 HTTP 请求:理解 cURL GET 语法
  • 基于dify的营养分析工作流:3分钟生成个人营养分析报告
  • 【HarmonyOS5】掌握UIAbility启动模式:Singleton、Specified、Multiton
  • 探究 Java SPI 原理与实战_打造高扩展性的应用架构
  • 【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
  • Razor编程中@Helper的用法大全
  • Android Firebase 推送问题排查指南
  • NVM常用命令记录
  • 基于PHP的扎染文创产品商城
  • 【OpenCV】使用opencv找哈士奇的脸
  • Linux云原生架构:从内核到分布式系统的进化之路
  • 【机器学习】PCA主成成分分析
  • 浏览器兼容-polyfill-本地服务-优化
  • 使用 C/C++的OpenCV 实时播放火柴人爱心舞蹈动画
  • 第6章:Neo4j数据导入与导出
  • 免费批量Markdown转Word工具
  • RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
  • LLMs 系列科普文(15)
  • 极客时间:在 Google Colab 上尝试 Prefix Tuning
  • Ubuntu系统用户基本管理
  • Docker 优势与缺点全面解析:容器技术的利与弊