news 2026/4/18 15:20:41

Android Jetpack Compose - SearchBar(搜索栏)、Tab(标签页)、时间选择器、TooltipBox(工具提示)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Jetpack Compose - SearchBar(搜索栏)、Tab(标签页)、时间选择器、TooltipBox(工具提示)

一、SearchBar(搜索栏)

// 输入的内容varquerybyremember{mutableStateOf("")}// 搜索栏是否展开varexpandedbyremember{mutableStateOf(false)}// 输入的内容valsuggestions=listOf("建议 1","建议 2","建议 3")Box(modifier=Modifier.fillMaxSize()){SearchBar(modifier=Modifier.align(Alignment.TopCenter),expanded=expanded,// 点击搜索栏时,系统会调用这个回调,传入新的展开状态(it),这里把它赋值给 expandedonExpandedChange={expanded=it},// 定义输入框inputField={SearchBarDefaults.InputField(query=query,// 输入新内容时,系统会调用这个回调,传入新内容(it),这里把它赋值给 queryonQueryChange={query=it},// 点击键盘上的“搜索”按钮时触发onSearch={expanded=false},expanded=expanded,onExpandedChange={expanded=it},placeholder={Text("请输入搜索内容")},// leadingIcon:组件左侧 / 前导位置的图标,例如,输入框前面放一个搜索图标leadingIcon={Icon(Icons.Default.Search,contentDescription=null)},// trailingIcon:组件右侧 / 尾部位置的图标,例如,输入框后面放一个清空图标,或者密码切换图标trailingIcon={if(expanded&&query.isNotEmpty()){IconButton(onClick={query=""}){Icon(Icons.Default.Close,contentDescription=null)}}})}){LazyColumn{items(count=suggestions.size,){index->Text(text=suggestions[index],modifier=Modifier.fillMaxWidth().clickable{query=suggestions[index]expanded=false}.padding(16.dp))}}}}

二、Tab(标签页)

1、基本介绍
  1. Tab 体系用于实现可切换的页面导航,主要有三个组件:Tab(单个标签页)、PrimaryTabRow(主要标签栏)、SecondaryTabRow(次要标签栏)

  2. Tab 是单个标签页的 UI 定义,不能单独使用,需要放在 PrimaryTabRow 或 SecondaryTabRow 中

2、演示
varselectedTabbyremember{mutableStateOf(0)}valtabs=listOf("首页","发现","我的")PrimaryTabRow(selectedTabIndex=selectedTab,){tabs.forEachIndexed{index,title->Tab(selected=selectedTab==index,onClick={selectedTab=index},text={Text(title)})}}

三、时间选择器

valcontext=LocalContext.currentvalcurrentTime=Calendar.getInstance()valtimePickerState=rememberTimePickerState(initialHour=currentTime.get(Calendar.HOUR_OF_DAY),initialMinute=currentTime.get(Calendar.MINUTE),is24Hour=true,)Box(modifier=Modifier.fillMaxSize()){TimePicker(modifier=Modifier.align(Alignment.TopCenter),state=timePickerState,)Button(modifier=Modifier.align(Alignment.BottomCenter),onClick={Toast.makeText(context,"选择的时间为${timePickerState.hour}:${timePickerState.minute}",Toast.LENGTH_SHORT).show()}){Text("确认")}}
valcontext=LocalContext.currentvalcurrentTime=Calendar.getInstance()valtimePickerState=rememberTimePickerState(initialHour=currentTime.get(Calendar.HOUR_OF_DAY),initialMinute=currentTime.get(Calendar.MINUTE),is24Hour=true,)Box(modifier=Modifier.fillMaxSize()){TimeInput(modifier=Modifier.align(Alignment.TopCenter),state=timePickerState,)Button(modifier=Modifier.align(Alignment.BottomCenter),onClick={Toast.makeText(context,"选择的时间为${timePickerState.hour}:${timePickerState.minute}",Toast.LENGTH_SHORT).show()}){Text("确认")}}

四、TooltipBox(工具提示)

  1. 基本使用
Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){TooltipBox(state=rememberTooltipState(),positionProvider=TooltipDefaults.rememberPlainTooltipPositionProvider(),tooltip={PlainTooltip{Text("收藏此文章")}},){IconButton(onClick={}){Icon(imageVector=Icons.Filled.Favorite,contentDescription="收藏")}}}
  1. 更复杂的富文本提示
Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){TooltipBox(state=rememberTooltipState(),positionProvider=TooltipDefaults.rememberPlainTooltipPositionProvider(),tooltip={RichTooltip(title={Text("添加到收藏夹")},action={TextButton(onClick={}){Text("知道了")}}){Text("收藏后可在个人中心快速找到")}},){IconButton(onClick={}){Icon(imageVector=Icons.Filled.Favorite,contentDescription="收藏")}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 15:18:29

云端跑Qwen3,本地调用!算网Qwen3镜像上线

阿里的Qwen3,当前仍然是非常强的开源模型之一。Qwen3-1.7B/4B/8B/14B/32B-Base 分别与 Qwen2.5-3B/7B/14B/32B/72B-Base 表现相当。特别是在 STEM、编码和推理等领域,Qwen3 基础模型的表现甚至超过了更大规模的 Qwen2.5 模型。Qwen3 支持 119 种语言和方…

作者头像 李华
网站建设 2026/4/14 11:12:32

深入解析osgearth加载3dtiles的实现原理与性能优化

1. osgearth与3DTiles技术初探 第一次接触osgearth加载3DTiles数据时,我完全被它的效果震撼到了。想象一下,你可以在一个虚拟地球场景中流畅地浏览城市级别的建筑模型,就像在玩3A游戏大作一样。这种体验背后,正是osgearth和3DTile…

作者头像 李华
网站建设 2026/4/14 11:11:34

10分钟精通WindowResizer:Windows窗口尺寸强制调整终极实战指南

10分钟精通WindowResizer:Windows窗口尺寸强制调整终极实战指南 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾遇到过这样的烦恼?某些应用程序的窗…

作者头像 李华
网站建设 2026/4/14 11:08:24

语音指令分类模型训练(基于机器学习方法)

1、统计音频长度信息,便于后续参数的设定import os import librosa import numpy as np# 配置参数 DATA_PATH "data4c" # 数据集根目录 FIXED_SAMPLE_RATE 16000def stat_audio_lengths():# 存储所有音频的长度(采样点数)和时长…

作者头像 李华
网站建设 2026/4/14 11:04:14

第209章 宏观量子生命(秀秀)

地球重建区的风,带着净化后土壤的微腥和顽强复苏的初生植物的清苦气息,吹拂着秀秀略显凌乱的发梢。她站在一片刚刚完成生物修复的坡地上,脚下是松软的、富含有机质的泥土,与“新大陆”那精确调控、无菌般的人造环境截然不同。这里的每一次呼吸,都带着一种粗糙而真实的生命…

作者头像 李华