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))
}
热门推荐
揭秘749局:冷战时期的特异功能研究
《749局》定档十一,神秘剧情提前揭秘!
打呼噜手术风险大揭秘,你了解多少?
冬季警惕鼾症手术并发症
春联创作入门:从主题到技巧,让你轻松掌握对联写作
北京构建多层次养老服务体系,破解超22%老龄化难题
北京今年将建百个养老服务中心,助餐助浴服务全覆盖
揭秘《诡异老宅》:创作鬼故事的五大要素
黑松镇的恐怖传说:一座荒废老宅与神秘古墓的惊悚故事
INFP职场人如何优雅应对压力?
INFP的艺术之路:从展览到创作
INFP职业规划指南:发挥创造力与同理心,实现理想与价值
北大公卫学院排名全国第二,科研成果登顶国际期刊
校友会2024学科排名:北大公共卫生学院列全国第二
色氨酸完全指南:功效、摄入量和注意事项
Nature最新研究:L-色氨酸可预防肠道感染,揭示膳食补充新途径
INFP的创意职业之路:广告策划or内容创作?
INFP型人格的心理健康挑战:自尊、社交、理想与情绪的平衡之道
INFP性格的心理学解析:揭秘内心的调停者
INFP性格的职场新趋势:从心理健康到价值实现
谷胱甘肽助力癌症治疗:抗氧化、增免疫、抑肿瘤
复旦大学附属中山医院教你预防血栓:简单实用的“4W法则”
谷传玲推荐:这样吃燕麦,远离血栓困扰
孙樾霸总短剧盘点:从傲娇到神秘,总有一款让你心动!
广电总局出手整治“霸总”短剧乱象
2024年霸总短剧冠军:《情深不悔,再爱难为》热度飙升
戒烟初期:身体的自我修复之旅
四月万象:高温下的旅游攻略
百克生物“感雾”鼻喷疫苗:无痛接种3天起效,校园流感防护新选择
冬季流感高发,专家推荐这些防护措施和疫苗