Compose DateRangePicker实现示例
创作时间:
作者:
@小白创作中心
Compose DateRangePicker实现示例
引用
CSDN
1.
https://blog.csdn.net/u012127961/article/details/144452503
本文将介绍如何在Jetpack Compose中实现一个日期范围选择器(DateRangePicker)。通过一个完整的代码示例,展示如何创建、显示和处理用户选择的日期范围。
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.DatePickerDefaults
import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.DateRangePicker
import androidx.compose.material3.DateRangePickerDefaults
import androidx.compose.material3.DisplayMode
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.rememberDateRangePickerState
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.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@Preview
fun DateRangePickerExample() {
var show by remember { mutableStateOf(false) }
var selectedStartDateMillis by remember { mutableStateOf<Long?>(null) }
var selectedEndDateMillis by remember { mutableStateOf<Long?>(null) }
Column {
Button(onClick = {
show = !show
}) {
Text(
text = Millis2Text(selectedStartDateMillis) + " - " + Millis2Text(
selectedEndDateMillis
)
)
}
}
//选择状态,设置初始模式为选择模式
val state = rememberDateRangePickerState(initialDisplayMode = DisplayMode.Picker)
if (show) {
DatePickerDialog(shape = RoundedCornerShape(8.dp), onDismissRequest = {
show = false
}, confirmButton = {
TextButton(onClick = {
//选择的开始和结束日期
selectedStartDateMillis = state.selectedStartDateMillis
selectedEndDateMillis = state.selectedEndDateMillis
show = !show
}) {
Text("确定")
}
}, dismissButton = {
TextButton(onClick = {
show = false
}) {
Text("取消")
}
}) {
DateRangePicker(
state = state,
showModeToggle = false, title = {
Text(
text = "选择日期范围"
)
},
modifier = Modifier
.fillMaxWidth()
.height(500.dp)
.padding(10.dp),
headline = {
//自定义选中结果栏
DateRangePickerDefaults.DateRangePickerHeadline(
selectedStartDateMillis = state.selectedStartDateMillis,
selectedEndDateMillis = state.selectedEndDateMillis,
displayMode = state.displayMode,
dateFormatter = remember { DatePickerDefaults.dateFormatter() },
modifier = Modifier.padding(bottom = 10.dp)
)
}
)
}
}
}
fun Millis2Text(value: Long?): String {
if (value == null) {
return "日期"
}
return SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()).format(Date(value))
}
热门推荐
重庆三大云端观景台全攻略:从520米高空到重庆之巅
自然拼读法:让四年级英语单词学习更有趣
苏教版四年级下册英语单词学习技巧大揭秘!
林老师的图像记忆法:让小学生快速记住英语单词
诗词里的新春祝福:26句古诗里的美好寓意
石井墟:从英雄古墟到现代商贸中心
怀孕初期腹痛会持续多久?怀孕初、中期下腹痛像经痛正常吗?抽痛多久与位置分析?
大S离世,DeepSeek评价她是“侠女”
创新教学让英语课堂“活”起来:部编版教材改革的实践与探索
林老师教你轻松记住四年级下册英语单词
人教版PEP四年级下册英语单词学习指南
林老师教你轻松记单词:数字篇
精致唯美:工笔重彩《洛神赋》
燕东萍离婚案后续:盛祝宝回应网友质疑
燕东萍离婚案:一场引发全民思考的婚姻悲剧
燕东萍离婚案背后的婚姻法新思考
英国上课怎么请假
腰椎间盘突出症能根治吗?
天热还觉腿脚寒,需警惕
天热还觉腿脚寒,需警惕
滹沱河管护方案
2025年NBA全明星分组出炉:詹库眉塔杜登同队 字约文亚齐聚国际组
NBA 2025 全明星新赛制是怎样的?
一文读懂:24-25赛季NBA杯赛程&赛制详解
2025年NBA全明星赛规则最新安排及赛制详情一览
寒假预习必备:人教版四年级下册语文电子课本使用指南
统编版四年级下册语文教材解析:帮你轻松掌握学习要点!
让四年级孩子重新爱上学习:从兴趣培养到习惯养成
四年级生必看:高效阅读理解技巧
药用炭片等药物的适用人群及使用注意事项