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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84614.shtml
英文地址,請注明出處:http://en.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;難…