kotlin,Android,jetpack compose,日期時間設置

AI生成,調試出來學習,這些小組件會用了,就可以組合一個大點的程序了。

package com.example.mydatetimeimport android.app.AlertDialog
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.clickable
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.Alignment
import androidx.compose.ui.unit.dp
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.util.*
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.window.Dialog
import com.example.mydatetime.ui.theme.MyDateTimeTheme
import java.time.Instant
import java.time.LocalDate
import java.time.LocalTime
import java.time.ZoneIdclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)enableEdgeToEdge()setContent {MyDateTimeTheme {DateAndTimePickerApp()}}}
}@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DatePickerDialog(onDismissRequest: () -> Unit,onDateSelected: (LocalDate) -> Unit
) {// 獲取當前日期val currentDate = LocalDate.now()// 創建DatePicker狀態,并初始化為當前日期val datePickerState = rememberDatePickerState(initialSelectedDateMillis = currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli())// 創建對話框Dialog(onDismissRequest = onDismissRequest,) {// 使用Column布局來組織對話框內容Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) {// 顯示標題Text(text = "Select Date",style = MaterialTheme.typography.headlineSmall,modifier = Modifier.padding(bottom = 16.dp))// 顯示日期選擇器DatePicker(state = datePickerState)// 使用Row布局來組織按鈕Row(modifier = Modifier.fillMaxWidth().padding(top = 16.dp),horizontalArrangement = Arrangement.End) {// 取消按鈕Button(onClick = onDismissRequest,modifier = Modifier.padding(end = 8.dp)) {Text("Cancel")}// 確定按鈕Button(onClick = {// 獲取選中的日期val selectedDate = LocalDate.ofInstant(Instant.ofEpochMilli(datePickerState.selectedDateMillis ?: currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli()),ZoneId.systemDefault())// 調用回調函數,傳遞選中的日期onDateSelected(selectedDate)}) {Text("OK")}}}}
}@OptIn(ExperimentalMaterial3Api::class) // 使用實驗性API的注解
@Composable // 標記為可組合函數
fun TimePickerDialog(onDismissRequest: () -> Unit, // 對話框關閉時的回調函數onTimeSelected: (LocalTime) -> Unit // 時間選擇后的回調函數
) {val currentTime = LocalTime.now(ZoneId.systemDefault()) // 獲取當前時間val timePickerState = rememberTimePickerState(initialHour = currentTime.hour, initialMinute = currentTime.minute) // 創建時間選擇器的狀態,并初始化為當前時間Dialog(onDismissRequest = onDismissRequest, // 設置對話框關閉的回調函數) {Column(modifier = Modifier.fillMaxWidth() // 填充父布局的寬度.padding(16.dp) // 設置內邊距) {Text(text = "Select Time", // 顯示文本style = MaterialTheme.typography.headlineSmall, // 使用主題中的小標題樣式modifier = Modifier.padding(bottom = 16.dp) // 設置底部內邊距)TimePicker(state = timePickerState) // 顯示時間選擇器Row(modifier = Modifier.fillMaxWidth() // 填充父布局的寬度.padding(top = 16.dp), // 設置頂部內邊距horizontalArrangement = Arrangement.End // 水平排列方式為靠右) {Button(onClick = onDismissRequest, // 點擊按鈕時調用關閉回調函數modifier = Modifier.padding(end = 8.dp) // 設置右邊距) {Text("Cancel") // 顯示取消文本}Button(onClick = {val selectedTime = LocalTime.of(timePickerState.hour, timePickerState.minute) // 獲取選中的時間onTimeSelected(selectedTime) // 調用時間選擇后的回調函數}) {Text("OK") // 顯示確定文本}}}}
}@Composable
fun DateAndTimePickerApp() {// 記住是否顯示日期選擇器的狀態var showDatePicker by remember { mutableStateOf(false) }// 記住是否顯示時間選擇器的狀態var showTimePicker by remember { mutableStateOf(false) }// 記住當前選中的日期和時間var selectedDateTime by remember { mutableStateOf(LocalDateTime.now()) }// 日期格式化器val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.getDefault())// 時間格式化器val timeFormatter = DateTimeFormatter.ofPattern("HH:mm", Locale.getDefault())// 使用Column布局,垂直居中,水平居中Column(modifier = Modifier.fillMaxSize().padding(16.dp),verticalArrangement = Arrangement.Center,horizontalAlignment = Alignment.CenterHorizontally) {// 顯示當前日期Text(text = "Date: ${selectedDateTime.format(dateFormatter)}",style = MaterialTheme.typography.bodyLarge,modifier = Modifier.clickable { showDatePicker = true } // 點擊時顯示日期選擇器.padding(8.dp))Spacer(modifier = Modifier.height(16.dp)) // 添加間距// 顯示當前時間Text(text = "Time: ${selectedDateTime.format(timeFormatter)}",style = MaterialTheme.typography.bodyLarge,modifier = Modifier.clickable { showTimePicker = true } // 點擊時顯示時間選擇器.padding(8.dp))// 日期選擇器if (showDatePicker) {DatePickerDialog(onDismissRequest = { showDatePicker = false }, // 點擊外部時關閉日期選擇器onDateSelected = { date ->// 更新選中的日期selectedDateTime = selectedDateTime.withYear(date.year).withMonth(date.monthValue).withDayOfMonth(date.dayOfMonth)showDatePicker = false // 關閉日期選擇器})}// 時間選擇器if (showTimePicker) {TimePickerDialog(onDismissRequest = { showTimePicker = false }, // 點擊外部時關閉時間選擇器onTimeSelected = { time ->// 更新選中的時間selectedDateTime = selectedDateTime.withHour(time.hour).withMinute(time.minute)showTimePicker = false // 關閉時間選擇器})}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77177.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

構建k8s下Helm私有倉庫與自定義Chart開發指南

#作者:程宏斌 文章目錄 自定義helm模板1、開發自己的chare包2、調試chart3、安裝chart 自定義helm模板 https://hub.helm.sh/ 1、開發自己的chare包 [rootmaster ~]# helm create mychare //創建一個名為mychare的chare包 [rootmaster ~]# tree -C mychare/ //以…

MOP數據庫中的EXPLAIN用法

EXPLAIN 是 SQL 中的一個非常有用的工具,主要用于分析查詢語句的執行計劃。執行計劃能展示數據庫在執行查詢時的具體操作步驟,像表的讀取順序、使用的索引情況、數據的訪問方式等,這有助于我們對查詢性能進行優化。 語法 不同的數據庫系統&…

項目范圍蔓延的十大誘因及應對策略

項目范圍蔓延的十大誘因及應對策略是什么?主要在于: 缺乏清晰目標、利益相關方過多、需求變更未及時管控、缺少優先級體系、溝通鏈條冗長、管理層干預頻繁、資源與預算不匹配、技術風險被低估、合同或協議不完善、缺乏階段性驗收與復盤。其中缺乏清晰目標…

做好一個測試開發工程師第二階段:java入門:idea新建一個project后默認生成的.idea/src/out文件文件夾代表什么意思?

時間:2025.4.8 一、前言 關于Java與idea工具安裝不再展開,網上很多教程,可以自己去看 二、project建立后默認各文件夾代表意思 1、首先new---->project后會得到文件如圖 其中: .idea文件代表:存儲這個項目的歷史…

算法進階指南 分形

問題描述 分形,具有以非整數維形式充填空間的形態特征。通常被定義為: “一個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都(至少近似地)是整體縮小后的形狀”,即具有自相似的性質。 現…

18-產品經理-跟蹤進度

禪道是一個可以幫助產品經理跟蹤研發進度的系統。通過禪道,產品經理可以從多個角度了解產品的研發狀態。在儀表盤中,可以展示所有產品或單一產品的概況,包括需求、計劃和發布數量,研發需求狀態,Bug修復率和計劃發布數。…

LeetCode算法題(Go語言實現)_36

題目 給定一個二叉樹的根節點 root ,和一個整數 targetSum ,求該二叉樹里節點值之和等于 targetSum 的 路徑 的數目。 路徑 不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點…

深度解析:文件或目錄損壞且無法讀取的應對之道

引言 在數字化辦公與數據存儲日益普及的今天,我們時常會遭遇各種數據問題,其中“文件或目錄損壞且無法讀取”這一狀況尤為令人頭疼。無論是個人用戶存儲在電腦硬盤、移動硬盤、U盤等設備中的重要文檔、照片、視頻,還是企業服務器上的關鍵業務…

數據庫如何確定或計算 LSN(日志序列號)

目錄 如何確定或計算 LSN(日志序列號)**一、獲取當前 LSN****二、確定日志解析的起始 LSN****三、LSN 與物理文件的映射****四、應用場景** 如何確定或計算 LSN(日志序列號) LSN(Log Sequence Number)是數…

[ctfshow web入門] web24

前置知識 isset:判斷這個變量是否聲明且不為NULL,否則返回False mt_srand:設置隨機數種子,如果不手動設置,那么系統會自動進行一次隨機種子的設置 mt_rand:生成一個隨機數,這個隨機數與種子有個…

習題與正則表達式

思路: 二分查找: left 1(最小可能距離),right L(最大可能距離)。 每次取 mid (left right) / 2,判斷是否可以通過增設 ≤ K 個路標使得所有相鄰路標的距離 ≤ mid。 貪心驗證…

最小K個數

文章目錄 題意思路代碼 題意 題目鏈接 思路 代碼 class Solution { public:vector<int> smallestK(vector<int>& arr, int k) {priority_queue<int> Q;for (auto &index:arr){Q.push(index);if (Q.size() > k)Q.pop();}vector<int> ans…

<tauri><rust><GUI>基于rust和tauri,將tauri程序打包為window系統可安裝的安裝包(exe、msi)

前言 本文是基于rust和tauri,由于tauri是前、后端結合的GUI框架,既可以直接生成包含前端代碼的文件,也可以在已有的前端項目上集成tauri框架,將前端頁面化為桌面GUI。 發文平臺 CSDN 環境配置 系統:windows 10平臺:visual studio code語言:rust、javascript庫:taur…

SAP系統采購信息記錄失效

問題&#xff1a;采購信息記錄失效 現象&#xff1a;最初主數據導入完成之后&#xff0c;單元測試的時采購信息記錄是有效的&#xff0c;中間經過配置的變化&#xff0c;集成測試初期發現采購信息記錄全部失效。 原因&#xff1a; 單元測試時發現采購訂單里面的條件類型…

視頻分析設備平臺EasyCVR打造汽車門店經營場景安全:AI智慧安防技術全解析

一、方案背景 某電動車企業不停爆出維權新聞&#xff0c;支持和反對的聲音此起彼伏&#xff0c;事情不斷發酵、反轉&#xff0c;每天都有新消息&#xff0c;令人目不暇接。車展、車店作為維權事件的高發場所&#xff0c;事后復盤和責任認定時&#xff0c;安防監控和視頻監控平…

ecovadis認證基本概述,ecovadis認證審核有效期

EcoVadis認證基本概述 1. 什么是EcoVadis認證&#xff1f; EcoVadis是全球領先的企業可持續發展&#xff08;ESG&#xff09;評級平臺&#xff0c;專注于評估企業在**環境&#xff08;E&#xff09;、勞工與人權&#xff08;S&#xff09;、商業道德&#xff08;L&#xff09…

初入Web網頁開發

1、網頁哪些內容 1.1 三個核心文件的作用 index.html&#xff1a;網頁的骨架&#xff0c;用HTML編寫網頁結構和內容。 script.js&#xff1a;網頁的行為&#xff0c;用JavaScript實現交互功能&#xff08;如按鈕點擊事件&#xff09;。 styles.css&#xff1a;網頁的外觀&…

CSS 符號

在 CSS 中&#xff0c;& 符號是 嵌套語法中的父選擇器引用符&#xff0c;主要用于 CSS 預處理器&#xff08;如 Sass、Less、Stylus&#xff09;和 現代 CSS 嵌套語法&#xff08;CSS Nesting&#xff09;。它代表當前選擇器的父級&#xff0c;用于簡化嵌套規則并生成更精確…

小白入門JVM、字節碼、類加載機制圖解

前提知識~ JDK 基本介紹 JDK 的全稱(Java Development Kit Java 開發工具包)JDK JRE java 的開發工具[java, javac,javadoc,javap 等]JDK 是提供給Java 開發人員使用的&#xff0c;其中包含了java 的開發工具&#xff0c;也包括了JRE。可開發、編譯、調試…… JRE 基本介紹…

consul服務注冊與發現(go)-學習筆記

參考博客 1、服務實例接口與默認實現 type ServiceInstance interface {// 獲取服務實例的唯一IDGetInstanceId() string// 獲取服務IDGetServiceId() string// 獲取服務實例的主機名或IP地址GetHost() string// 獲取服務實例的端口號GetPort() int// 判斷服務實例是否使用HT…