鸿蒙中 下拉选择菜单Select组件
摘要:HarmonyOS(ArkUI)的Select组件提供了下拉选择功能,包含三大核心功能:1)通过SelectOption数组创建选项列表;2)使用selected()设置初始选中项;3)通过onSelect回调处理选择事件。组件支持丰富的样式定制,包括按钮文本、菜单项样式、选中项样式等,并提供controlSize、divider等高级属性。对于特殊需求,可使用menuItemContent
本文同步发表于 微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
HarmonyOS (ArkUI) 中的 Select 组件的核心是提供一个下拉选择菜单,让用户在预设的多个选项中进行单项选择。
一、核心功能
Select 组件的使用主要围绕三个核心部分展开:创建选项、设置选中项、响应选择事件。
1. 创建组件与选项列表
这是构建 Select 的第一步,通过 Select(options: Array<SelectOption>) 接口传入一个选项数组。每个选项都是一个 SelectOption 对象,主要包含以下属性:
| 属性名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
value |
ResourceStr |
是 | 选项显示的文本内容。 |
icon |
ResourceStr |
否 | 选项旁边的图标资源路径(如图片)。 |
symbolIcon (API 12+) |
SymbolGlyphModifier |
否 | 选项旁边的系统 Symbol 图标资源。其显示优先级高于 icon。 |
// 一个包含图标和Symbol图标的选项列表示例
Select([
{ value: '选项一', icon: $r('app.media.icon1') },
{ value: '选项二', symbolIcon: $r('sys.media.ohos_app_icon') }, // 使用系统Symbol图标
{ value: '选项三' }
])
2. 设置选中项
使用 .selected() 属性可以设置下拉菜单初始选中的选项。索引值从 0 开始。这里有一些行为规则需要注意:
-
如果不设置或设置异常值,默认选中索引为 -1(无选中项)。
-
如果设置为
undefined或null,则会选中第一项(索引0)。 -
从API 10开始,该属性支持
$$双向绑定变量;从API 18开始,新增对!!双向绑定变量的支持。
3. 响应选择事件
当用户选择一个选项后,可以通过 onSelect 事件回调获取选择结果,它返回两个参数:index(选中项的索引)和 value(选中项的值)。
Select([...])
.selected(0) // 默认选中第一项
.onSelect((index: number, value?: string) => {
console.info(`选中了第${index}项,值是:${value}`);
// 可以在这里更新界面状态或执行业务逻辑
})
二、样式与自定义
Select 组件提供了丰富的属性来自定义外观,从按钮本身到下拉菜单项都可以细致调整。
| 属性类别 | 属性名 | 说明 |
|---|---|---|
| 按钮样式 | value, font, fontColor |
设置按钮显示的文本、字体样式和颜色。 |
| 菜单项通用样式 | optionFont, optionFontColor, optionBgColor |
设置所有下拉菜单项的字体、颜色和背景色。 |
| 选中项样式 | selectedOptionFont, selectedOptionFontColor, selectedOptionBgColor |
专门设置被选中菜单项的字体、颜色和背景色。 |
| 组件尺寸 | controlSize (API 12+) |
提供预设的组件尺寸(如 ControlSize.SMALL),设置后宽高会自适应文本。 |
| 分割线 | divider (API 12+) |
可以设置下拉项之间的分割线样式,或传入 null 来隐藏分割线。 |
对于有极高自定义需求的场景(例如完全改变菜单项布局),可以使用 menuItemContentModifier (API 12+) 属性。它能完全接管下拉菜单项内容的渲染,但请注意,使用此功能后,上述大部分样式属性将不再生效。
三、进阶特性
-
高级特性:完全自定义菜单项内容 (
menuItemContentModifier)、设置分割线 (divider) 等高级属性。当系统自带组件无法满足需求时,进行完全的自定义封装。 -
状态与尺寸管理:当选项变化或需要动态控制组件大小时,记得将选项数据或
selected索引用@State装饰,这样界面才会同步更新。同时,controlSize、width和height属性存在优先级规则,通常优先使用controlSize以确保文本显示完整。 -
动态属性设置:如果想根据某些条件动态地添加或移除某个属性(而不仅仅是改变属性值),可以用
attributeModifier接口。该接口提供了更精细的控制能力。
使用步骤总结
-
导入与声明:确保在
.ets文件中正确导入组件,并使用@State管理选中状态。 -
构建选项:准备一个
SelectOption数组,定义每个选项的value,并可选择性地添加icon。 -
配置组件:通过链式调用设置
selected(初始选中)、value(按钮文本)以及字体、颜色等样式。 -
处理事件:在
onSelect回调中编写逻辑,处理用户的选择。
更多推荐
所有评论(0)