HarmonyOS6.0开发之Select组件,就像一个“会收缩的魔法抽屉”

Hello!我是程序员Feri------ 13 年编程老炮,实战派技术人,拆解编程技巧、分享副业心得,记录程序员的进阶路,AI 时代一起稳稳向前。

在APP里做单选选择时,总不能让一堆按钮挤在界面上吧?今天要聊的Select组件,就像一个"会收缩的魔法抽屉"------平时只露一个选项,点一下就弹出所有选择,既省空间又清爽,专治"选项太多挤得慌"的难题!

一、Select组件:啥玩意儿?用来干啥?

Select组件的核心技能很简单:提供下拉单选功能。就像你点外卖时的"口味选择"------默认显示一个(比如"微辣"),点一下展开列表(微辣、中辣、特辣、不辣),选一个就自动收起,还不占地方~

它支持给选项加小图标,让选择更有辨识度,不过记住:每个选项里**"value(选项内容)是必填项"**,图标就是"可选装饰",加不加看你的界面颜值需求~

基本用法长这样,像给抽屉里塞选项卡片:

typescript 复制代码
Select([
  { value: "选项1", icon: 图标路径 }, // 带图标的选项
  { value: "选项2" } // 纯文字选项
])
.onSelect((索引, 内容) => {
  // 选完后的操作
})
.属性名(属性值) // 给抽屉打扮打扮

二、Select组件的"三大核心魔法":别搞混啦!

想玩转这个"魔法抽屉",先把这三个核心点吃透,像掌握抽屉的"开关密码"一样简单~

1. value属性:抽屉的"门面话"

默认显示在抽屉外的文本,比如你打开外卖APP,默认显示"微辣",这个"微辣"就是value的值。

作用:告诉用户"当前选的啥",没选之前先亮个默认选项撑场面~

2. selected属性:抽屉里的"默认心头好"

指定打开抽屉时,哪个选项是预先选中的(用索引表示,从0开始算)。

比如选项列表是[北京、南京、武汉],selected(2)就默认选中"武汉"------相当于打开抽屉时,提前把"武汉"的卡片翻到最前面~

3. onSelect事件:选完后的"情报接收器"

这是最关键的"互动环节"!点选某个选项后,它会立马返回两个"情报":

  • 第一个是索引(number类型):告诉我们选的是第几个选项(比如选"南京"是第1个,索引就是1);
  • 第二个是内容(string类型) :直接返回选中的选项文字(比如"南京")。
    有了这两个情报,就能做后续操作啦~

三、实战演练:两个"趣味小案例"秒会用法

光说不练假把式,咱们用两个生活化的例子,手把手教你用Select组件,就像玩小游戏一样简单!

案例1:带图标的"城市旅行清单"

想做一个"选择旅行目的地"的下拉框,每个城市配个小图标,选完还能在控制台看到结果~

代码拆解:

typescript 复制代码
// 城市选择下拉框:带图标更直观
Select([
  { value: "北京", icon: $r("sys.media.AI_phone") }, // 北京+手机图标
  { value: "南京", icon: $r("sys.media.app_lock_picture") }, // 南京+锁定图标
  { value: "武汉", icon: $r("sys.media.AI_form") }, // 武汉+表单图标
  { value: "郑州", icon: $r("sys.media.AI_play") }, // 郑州+播放图标
  { value: "上海", icon: $r("sys.media.AI_translation") }, // 上海+翻译图标
  { value: "杭州", icon: $r("sys.media.Celia") } // 杭州+Celia图标
])
.width("80%") // 抽屉宽度占屏幕80%,不挤不窄
.value("武汉") // 默认显示"武汉"(门面话)
.selected(2) // 默认选中索引2的"武汉"(心头好)
.onSelect((i: number, v: string) => {
  // 选完后打印情报:索引和城市名
  console.log(`选中了第${i}个城市:${v},准备出发!`);
})

案例2:联动文本的"书籍推荐官"

做一个选书籍的下拉框,选完后自动在界面上显示"你喜欢的书籍:XXX",像个智能推荐小助手~

代码拆解:

typescript 复制代码
@Entry
@Component
struct Demo4 {
  // 先准备好书籍清单:像整理好的书单数组
  books: SelectOption[] = [
    { value: "《三体》" },
    { value: "《水浒传》" },
    { value: "《围城》" }
  ];
  // 存储选中的书籍信息,默认空字符串
  @State msg: string = '';

  build() {
    Column({ space: 20 }) {
      // 书籍选择下拉框:直接用数组传选项,更简洁
      Select(this.books)
        .width("50%") // 宽度占50%,精致小巧
        .onSelect((i: number, v: string) => {
          // 选完后更新文本内容,联动显示
          this.msg = `你喜欢的书籍:${v}`;
        });

      // 显示选中结果的文本:像个小黑板
      Text(this.msg)
        .fontSize(18)
        .fontWeight(FontWeight.Bold);
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center); // 居中显示,更美观
  }
}

四、小技巧:让你的Select组件更"贴心"

  1. 图标别乱加:只有需要区分选项时加图标(比如城市、分类),纯文字选项加图标反而显乱;
  2. 宽度要合适:根据选项文字长度设置width(比如城市名用80%,书籍名用50%),别太窄导致文字截断;
  3. 默认值要合理:value和selected最好对应上(比如value设为"武汉",selected就设2),避免"显示的和默认选中的不一样"的小bug~

总结

Select组件就像APP里的"精简单选神器"------不用占用大量界面空间,还能让用户快速完成选择,不管是选城市、选书籍,还是选口味,用它准没错!

如果大家想考取鸿蒙开发者认证的,欢迎加入我的专属考试链接中:developer.huawei.com/consumer/cn...

按照上面的例子练一遍,分分钟就能搞定下拉单选需求,界面瞬间变清爽~

相关推荐
用户764932807684 小时前
一文彻底搞明白HarmonyOS6.0基础之ArkTS中的所有循环语句
harmonyos
用户764932807684 小时前
HarmonyOS6.0开发之记忆翻牌游戏,轻松拿捏!
harmonyos
晚霞的不甘4 小时前
[鸿蒙2025领航者闯关]鸿蒙实战终极篇:构建全场景智能应用的工程化体系与生态融合
华为·harmonyos
waeng_luo4 小时前
[鸿蒙2025领航者闯关] HarmonyOS服务卡片实战
harmonyos·鸿蒙2025领航者闯关·鸿蒙6实战·开发者年度总结
晚霞的不甘5 小时前
[鸿蒙2025领航者闯关]鸿蒙实战高阶:Stage模型架构与元服务开发深度解析
华为·架构·harmonyos
w_zero_one5 小时前
ArkTS鸿蒙--关系型数据库的级联
数据库·harmonyos
汉堡黄•᷄ࡇ•᷅5 小时前
鸿蒙开发:案例集合List:多列表相互拖拽(删除/插入,偏移动效)(微暇)
华为·harmonyos·鸿蒙·鸿蒙系统
waeng_luo5 小时前
[鸿蒙2025领航者闯关]使用RelationalStore实现增删改查(CRUD)操作
harmonyos·鸿蒙·#鸿蒙2025领航者闯关·#鸿蒙6实战
后端小张6 小时前
【鸿蒙2025领航者闯关】从技术突破到生态共建,开发者的成长与远航
华为·wpf·生态·harmonyos·鸿蒙·鸿蒙系统·鸿蒙2025领航者试炼