当前位置: 首页 > news >正文

Android Jetpack Compose - PullToRefreshBox、RadioButton、DatePicker、DatePickerDialog、DateRangePicker

一、PullToRefreshBox

1、基本介绍
  1. PullToRefreshBox 用于为可滚动内容(例如,LazyColumn)添加下拉刷新功能

  2. 只需把 PullToRefreshBox 包在外面,传一个加载状态和一个刷新回调,剩下的手势、动画、指示器都由它自动处理

funPullToRefreshBox(isRefreshing:Boolean,onRefresh:()->Unit,modifier:Modifier=Modifier,state:PullToRefreshState=rememberPullToRefreshState(),contentAlignment:Alignment=Alignment.TopStart,indicator:@ComposableBoxScope.()->Unit={Indicator(modifier=Modifier.align(Alignment.TopCenter),isRefreshing=isRefreshing,state=state)},content:@ComposableBoxScope.()->Unit){}
参数说明
isRefreshing是否正在刷新
onRefresh刷新回调
modifier修饰符
state状态
contentAlignment内容对齐方式
indicator刷新指示器
content滚动内容
2、演示
varitems by remember{mutableStateOf(List(5){"第 $it 项"})}val scope=rememberCoroutineScope()varisRefreshing by remember{mutableStateOf(false)}PullToRefreshBox(modifier=Modifier.fillMaxSize(),isRefreshing=isRefreshing,onRefresh={isRefreshing=truescope.launch{delay(1500)items=List((1..10).random()){"新数据 $it"}isRefreshing=false}}){LazyColumn(modifier=Modifier.fillMaxSize(),contentPadding=PaddingValues(16.dp),verticalArrangement=Arrangement.spacedBy(8.dp)){items(items){item->Card(modifier=Modifier.fillMaxWidth(),colors=CardDefaults.cardColors(containerColor=MaterialTheme.colorScheme.surfaceVariant)){Text(text=item,modifier=Modifier.padding(16.dp),style=MaterialTheme.typography.bodyLarge)}}}}

二、RadioButton

1、基本介绍
funRadioButton(selected:Boolean,onClick:(()->Unit)?,modifier:Modifier=Modifier,enabled:Boolean=true,colors:RadioButtonColors=RadioButtonDefaults.colors(),interactionSource:MutableInteractionSource?=null){}
参数说明
selected是否选中
onClick点击回调
modifier修饰符
enabled是否启用
colors自定义颜色,通过RadioButtonDefaults.colors()配置
interactionSource自定义交互状态反馈
2、演示
varselectedbyremember{mutableStateOf(false)}RadioButton(selected=selected,onClick={selected=true})
varselectIndexbyremember{mutableStateOf(1)}Column(modifier=Modifier.fillMaxSize(),horizontalAlignment=Alignment.CenterHorizontally,verticalArrangement=Arrangement.Center){(1..3).forEach{index->Row(modifier=Modifier.fillMaxWidth().height(100.dp),verticalAlignment=Alignment.CenterVertically,horizontalArrangement=Arrangement.Center){RadioButton(modifier=Modifier.padding(end=16.dp),selected=selectIndex==index,onClick={selectIndex=index})Text(text="选项$index")}}}
valradioOptions=listOf("选项 1","选项 2","选项 3")varselectedOptionbyremember{mutableStateOf(radioOptions[0])}Column(modifier=Modifier.fillMaxSize().selectableGroup(),horizontalAlignment=Alignment.CenterHorizontally,verticalArrangement=Arrangement.Center){radioOptions.forEach{option->Row(modifier=Modifier.fillMaxWidth().height(100.dp).selectable(selected=(selectedOption==option),onClick={selectedOption=option},role=Role.RadioButton),verticalAlignment=Alignment.CenterVertically,horizontalArrangement=Arrangement.Center){RadioButton(modifier=Modifier.padding(end=16.dp),selected=selectedOption==option,onClick=null,)Text(text=option)}}}

三、DatePicker

funconvertMillisToDate(millis:Long):String{valformatter=SimpleDateFormat("yyyy-MM-dd",Locale.getDefault())returnformatter.format(Date(millis))}
valcontext=LocalContext.currentvaldatePickerState=rememberDatePickerState()valselectedDate=datePickerState.selectedDateMillis?.let{convertMillisToDate(it)}?:""if(selectedDate.isNotBlank()){Toast.makeText(context,selectedDate,Toast.LENGTH_SHORT).show()}Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){DatePicker(state=datePickerState)}

四、DatePickerDialog

funconvertMillisToDate(millis:Long):String{valformatter=SimpleDateFormat("yyyy-MM-dd",Locale.getDefault())returnformatter.format(Date(millis))}
valdatePickerState=rememberDatePickerState()valshowDatePickerDialog=remember{mutableStateOf(false)}valselectedDate=remember{mutableStateOf("")}Box(modifier=Modifier.fillMaxSize()){if(selectedDate.value.isNotBlank()){Text(modifier=Modifier.align(Alignment.TopCenter),text=selectedDate.value)}Button(modifier=Modifier.align(Alignment.BottomCenter),onClick={showDatePickerDialog.value=true}){Text("选择日期")}if(!showDatePickerDialog.value)return@BoxdatePickerState.selectedDateMillis=nullDatePickerDialog(confirmButton={TextButton(onClick={showDatePickerDialog.value=falseselectedDate.value=datePickerState.selectedDateMillis?.let{convertMillisToDate(it)}?:""}){Text("确认")}},dismissButton={TextButton(onClick={showDatePickerDialog.value=falseselectedDate.value=""}){Text("取消")}},onDismissRequest={showDatePickerDialog.value=false},){DatePicker(state=datePickerState)}}

五、DateRangePicker

funconvertMillisToDate(millis:Long):String{valformatter=SimpleDateFormat("yyyy-MM-dd",Locale.getDefault())returnformatter.format(Date(millis))}
valcontext=LocalContext.currentvaldateRangePickerState=rememberDateRangePickerState()valselectedDateStart=dateRangePickerState.selectedStartDateMillis?.let{convertMillisToDate(it)}?:""valselectedDateEnd=dateRangePickerState.selectedEndDateMillis?.let{convertMillisToDate(it)}?:""if(selectedDateStart.isNotBlank()&&selectedDateEnd.isNotBlank()){Toast.makeText(context,"$selectedDateStart-$selectedDateEnd",Toast.LENGTH_SHORT).show()}Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){DateRangePicker(modifier=Modifier.fillMaxWidth().height(500.dp).padding(16.dp),state=dateRangePickerState)}
http://www.jsqmd.com/news/375319/

相关文章:

  • 输入洗车店小时流量,预测高峰,推荐用户错峰时间。
  • 基于springboot和vue框架的校园个人资料管理系统设计与实现
  • S-GRec Personalized Semantic-Aware Generative Recommendation with Asymmetric Advantage
  • 输入夜市各摊位人流数据,计算并推荐收益最高位置。
  • 2026最新十大知名欧松板品牌推荐榜!优质环保品质与高性价比源头厂家选择指南,适配环保家装与全屋定制多场景 - 品牌推荐2026
  • 基于深度学习YOLOv10的安全锥识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 基于springboot和vue框架的企业人事绩效考核综合管理系统
  • 极萌美容仪有效果吗?效果见证,美丽无需等待 - 速递信息
  • redis学习笔记(四)—— list数据类型
  • 基于springboot和vue框架的企业人才招聘系统
  • 行业内专业的2025板材十大品牌排名 - 品牌推荐(官方)
  • 基于springboot和vue框架的公司人事工资管理系统 员工绩效考科福利系统
  • AT_arc212_d [ARC212D] Two Rooms
  • Writeup:AliCrackme2
  • Day19
  • 基于深度学习YOLOv8的密集行人检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)
  • 基于深度学习YOLOv10的安全背心穿戴识别检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 市面上专业的2026板材十大品牌有哪些 - 品牌推荐(官方)
  • 基于springboot和vue框架的中小学学生成绩查询系统
  • 基于深度学习YOLOv10的杂草检测系统(12种)(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 面板数据模型:区域与企业经济分析的实证工具
  • AI应用架构师必知:AI模型监控与告警的核心要点
  • 相机标定(Calibration)01-4:相机标定中不同标定板的优缺点【棋盘格、圆点阵列、ArUco标记板、AprilTag标记板、3D标定物】
  • 基于深度学习YOLOv10的篮球运动员检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • Spark + 数据湖:构建实时分析管道的5个关键技巧
  • 陀螺仪和加速度计(模拟状态,计算运动状态)
  • 提示工程性能测试框架对比:主流工具的性能、易用性、扩展性全测评
  • 数据治理标准化:ISO 38505在大数据环境下的应用
  • 市面上2026板材厂家排名 - 品牌推荐(官方)
  • 基于深度学习YOLOv10的密集行人检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)