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))
}
热门推荐
丽江古城打卡,大理洱海环游,昆明滇池漫步!
陕西自驾游:穿越丝路与盛唐的历史遗迹探秘
炉石传说奥术德:新手必学卡组攻略
十一黄金周西双版纳摄影打卡地推荐
冬日西双版纳旅游打卡:曼听公园、野象谷、热带植物园
用概率论破解福彩3D:从杀码技巧到数据分析
探索反义词在生活中的应用及其表达的丰富性与复杂性
九寨沟:智慧旅游的先行者与创新者
AI赋能:智慧文旅如何重塑旅行体验?
陕西车主必看!92还是95?教你正确加油不踩雷
陶瓷刀可以在家锐化吗?
昆明地铁春节运营大升级!延时运营加开备车,全方位保障市民出行
昆明地铁带你打卡网红景点!
昆明地铁9号线最新进展:全长73公里贯穿东部区域,将缓解交通拥堵
昆明地铁2035年线网规划大揭秘:12条普线+3条快线构建未来交通新格局
栗子坪:大熊猫的生态乐园
必试:8种最地道的香港街头小吃
香港夜市全攻略:16个特色夜市,吃喝玩乐一网打尽
冬游云南:昆明到丽江的完美6天5晚行程攻略
西南大学校庆晚会致敬袁隆平等大师:百年学府的人文传承
社保卡出现问题怎么办?一文详解5种解决方案
社会保障卡密码忘记了怎么处理?
中山大学专家推荐:抗痘饮食大揭秘!
第四代A酸问世!科学治疗让痘痘无处藏身
Omega-3脂肪酸:护肤新宠,从饮食到护肤的全面指南
家庭下水道堵塞问题解决技巧与预防方法分享
常见的下水道疏通方法
高考英语作文多少分?附高考英语作文评分标准及写作技巧!
象山石浦渔村:冬日里的海鲜盛宴与绝美风光
北海海鲜之旅:打卡绝美景点