1# picker 2 3> **说明:** 4> 从API version 4开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 5 6滑动选择器组件,类型支持普通选择器、日期选择器、时间选择器、时间日期选择器和多列文本选择器。 7 8 9## 权限列表 10 11无 12 13 14## 子组件 15 16不支持。 17 18 19## 属性 20 21除支持[通用属性](../arkui-js/js-components-common-attributes.md)外,还支持如下属性: 22 23| 名称 | 类型 | 默认值 | 必填 | 描述 | 24| ---- | ------ | ---- | ---- | ---------------------------------------- | 25| type | string | - | 否 | 该属性值不支持动态修改。可选择项有:<br/>- text:文本选择器。<br/>- date:日期选择器。<br/>- time:时间选择器。<br/>- datetime:日期时间选择器。<br/>- multi-text:多列文本选择器。 | 26 27 28### 普通选择器 29 30滑动选择器类型设置为text时表示普通选择器。 31 32| 名称 | 类型 | 默认值 | 必填 | 描述 | 33| -------- | ------ | ---- | ---- | ---------------------------------------- | 34| range | Array | - | 否 | 设置普通选择器的取值范围,如["15", "20", "25"]。<br/>使用时需要使用数据绑定的方式`range ={{data}}`,js中声明相应变量`data:["15","20","25"]`。 | 35| selected | string | 0 | 否 | 设置普通选择器弹窗的默认取值,取值需要是 range 的索引值,该取值表示选择器弹窗界面的默认选择值。 | 36| value | string | - | 否 | 设置普通选择器的值。 | 37 38 39### 日期选择器 40 41滑动选择器类型设置为date时表示日期选择器。 42 43| 名称 | 类型 | 默认值 | 必填 | 描述 | 44| ------------------ | ------------ | ---------- | ---- | ---------------------------------------- | 45| start | <time> | 1970-1-1 | 否 | 设置日期选择器的起始时间,格式为 YYYY-MM-DD。 | 46| end | <time> | 2100-12-31 | 否 | 设置日期选择器的结束时间,格式为 YYYY-MM-DD。 | 47| selected | string | 当前日期 | 否 | 设置日期选择器弹窗的默认取值,格式为 YYYY-MM-DD,该取值表示选择器弹窗界面的默认选择值。 | 48| value | string | - | 是 | 设置日期选择器的值。 | 49| lunar<sup>5+</sup> | boolean | false | 否 | 设置日期选择器弹窗界面是否为农历展示。 | 50| lunarswitch | boolean | false | 否 | 设置日期选择器是否显示农历开关。当值为true时,显示农历开关,点击农历开关可切换公历和农历。当值为false时,不显示农历开关。<br/>当lunarswitch=true且lunar=true时,开关按钮处于被选中状态。 | 51 52 53### 时间选择器 54 55滑动选择器类型设置为time时表示时间选择器。 56 57| 名称 | 类型 | 默认值 | 必填 | 描述 | 58| ------------- | ------- | ----------------------------------- | ---- | ---------------------------------------- | 59| containsecond | boolean | false | 否 | 设置时间选择器是否包含秒。 | 60| selected | string | 当前时间 | 否 | 设置时间选择器弹窗的默认取值,格式为 HH:mm;当包含秒时,格式为HH:mm:ss,<br/>该取值表示选择器弹窗界面的默认选择值。 | 61| value | string | - | 否 | 设置时间选择器的值。 | 62| hours | number | 24<sup>1-4</sup><br/>-<sup>5+</sup> | 否 | 设置时间选择器采用的时间格式,可选值:<br/>- 12:按照12小时制显示,用上午和下午进行区分;<br/>- 24:按照24小时制显示。<br/>从API Version 5开始,默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。 | 63 64 65### 日期时间选择器 66 67滑动选择器类型设置为datetime时表示日期时间选择器,日期的选择范围为本年的日月。 68 69| 名称 | 类型 | 默认值 | 必填 | 描述 | 70| ------------------ | ------- | ----------------------------------- | ---- | ---------------------------------------- | 71| selected | string | 当前日期时间 | 否 | 设置日期时间选择器弹窗的默认取值,有两种可选格式。<br/>- 月日时分:MM-DD-HH-mm<br/>- 年月日时分:YYYY-MM-DD-HH-mm<br/>不设置年时,默认使用当前年,该取值表示选择器弹窗界面的默认选择值。 | 72| value | string | - | 是 | 设置日期时间选择器的值。 | 73| hours | number | 24<sup>1-4</sup><br/>-<sup>5+</sup> | 否 | 设置日期时间选择器采用的时间格式,可选值:<br/>- 12:按照12小时制显示,用上午和下午进行区分;<br/>- 24:按照24小时制显示。<br/>从API Version 5开始,默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。 | 74| lunar<sup>5+</sup> | boolean | false | 否 | 设置日期时间选择器弹窗界面是否为农历展示。 | 75| lunarswitch | boolean | false | 否 | 设置日期选择器是否显示农历开关。当值为true时,显示农历开关,点击农历开关可切换公历和农历。当值为false时,不显示农历开关。<br/>当lunarswitch=true且lunar=true时,开关按钮处于被选中状态。 | 76 77 78### 多列文本选择器 79 80滑动选择器类型设置为multi-text时表示多列文本选择器。 81 82| 名称 | 类型 | 默认值 | 必填 | 描述 | 83| -------- | ------- | --------- | ---- | ---------------------------------------- | 84| columns | number | - | 是 | 设置多列文本选择器的列数。 | 85| range | 二维Array | - | 否 | 设置多列文本选择器的选择项,其中range 为二维数组。长度表示多少列,数组的每项表示每列的数据,如 [["a","b"], ["c","d"]]。<br/>使用时需要使用数据绑定的方式`range ={{data}}`,js中声明相应变量`data:["15","20","25"]`。 | 86| selected | Array | [0,0,0,…] | 否 | 设置多列文本选择器弹窗的默认值,每一列被选中项对应的索引构成的数组,该取值表示选择器弹窗界面的默认选择值。 | 87| value | Array | - | 否 | 设置多列文本选择器的值,每一列被选中项对应的值构成的数组。 | 88 89 90## 样式 91 92除支持[通用样式](../arkui-js/js-components-common-styles.md)外,还支持如下样式: 93 94| 名称 | 类型 | 默认值 | 必填 | 描述 | 95| -------------------------- | -------------------------- | ---------- | ---- | ---------------------------------------- | 96| text-color | <color> | - | 否 | 选择器的文本颜色。 | 97| font-size | <length> | - | 否 | 选择器的文本尺寸。 | 98| allow-scale | boolean | true | 否 | 选择器的文本尺寸是否跟随系统设置字体缩放尺寸进行放大缩小。<br/>如果在config描述文件中针对ability配置了fontSize的config-changes标签,则应用不会重启而直接生效。 | 99| letter-spacing | <length> | 0 | 否 | 选择器的字符间距。见[text组件的letter-spacing样式属性](../arkui-js/js-components-basic-text.md#样式)。 | 100| text-decoration | string | - | 否 | 选择器的文本修饰。见[text组件的text-decoration样式属性](../arkui-js/js-components-basic-text.md#样式)。 | 101| font-style | string | normal | 否 | 选择器的字体样式。见[text组件的font-style样式属性](../arkui-js/js-components-basic-text.md#样式)。 | 102| font-weight | number \| string | normal | 否 | 选择器的字体粗细。见[text组件的font-weight样式属性](../arkui-js/js-components-basic-text.md#样式)。 | 103| font-family | string | sans-serif | 否 | 选择器的字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过[自定义字体](../arkui-js/js-components-common-customizing-font.md)指定的字体,会被选中作为文本的字体。 | 104| line-height | <length> | 0px | 否 | 选择器的文本行高。 | 105| column-height<sup>5+</sup> | <length> | - | 否 | 选择器的选择项列表高度。 | 106 107 108## 事件 109 110除支持[通用事件](../arkui-js/js-components-common-events.md)外,还支持如下事件: 111 112 113### 普通选择器 114 115| 名称 | 参数 | 描述 | 116| ------ | ---------------------------------------- | ---------------------------------------- | 117| change | { newValue: newValue, newSelected: newSelected } | 普通选择器选择值后点击弹窗中的确定按钮时触发该事件(newSelected为索引)。 | 118| cancel | - | 用户点击弹窗中的取消按钮时触发该事件。 | 119 120 121### 日期选择器 122 123| 名称 | 参数 | 描述 | 124| ------ | ---------------------------------------- | ---------------------------------------- | 125| change | { year: year, month: month, day: day } | 日期选择器选择值后点击弹窗中的确认按钮时触发该事件。<br/>从API Version 5开始,month值范围为: 0(1月)~11(12月)。 | 126| cancel | - | 用户点击弹窗中的取消按钮时触发该事件。 | 127 128 129### 日期时间选择器 130 131| 名称 | 参数 | 描述 | 132| ------ | ---------------------------------------- | ---------------------------- | 133| change | { year: year, month: month, day: day, hour: hour, minute: minute} | 日期时间选择器选择值后点击弹窗中的确认按钮时触发该事件。 | 134| cancel | - | 用户点击弹窗中的取消按钮时触发该事件。 | 135 136 137### 时间选择器 138 139| 名称 | 参数 | 描述 | 140| ------ | ---------------------------------------- | ---------------------------------------- | 141| change | { hour: hour, minute: minute, [second: second] } | 时间选择器选择值后点击弹窗中的确认按钮时触发该事件,当使用时分秒时,还包含秒数据。 | 142| cancel | - | 用户点击弹窗中的取消按钮时触发该事件。 | 143 144 145### 多列文本选择器 146 147| 名称 | 参数 | 描述 | 148| ------------ | ---------------------------------------- | ---------------------------------------- | 149| change | { newValue: [newValue1, newValue2, newValue3, …], newSelected:[newSelected1, newSelected2, newSelected3, …] } | 多列文本选择器选择值后点击弹窗中的确认按钮时触发该事件,其中:<br/>- newValue:被选中项对应的值构成的数组。<br/>- newSelected:被选中项对应的索引构成的数组,两者的长度和range的长度一致。 | 150| columnchange | { column: column, newValue: newValue, newSelected: newSelected } | 多列文本选择器中某一列的值改变时触发该事件,其中:<br/>- column:第几列修改。<br/>- newValue:选中的值。<br/>- newSelected:选中值对应的索引。 | 151| cancel | - | 用户点击弹窗中的取消按钮时触发该事件。 | 152 153 154## 方法 155 156除支持[通用方法](../arkui-js/js-components-common-methods.md)外,支持如下方法: 157 158| 名称 | 参数 | 描述 | 159| ---- | ---- | --------------- | 160| show | - | 显示 picker。 | 161 162 163## 示例 164 165```html 166<!-- xxx.hml --> 167<div class="container"> 168 <select @change="selectChange"> 169 <option value="{{ item }}" for="item in selectList"> 170 {{ item }} 171 </option> 172 </select> 173 <picker id="picker0" type="text" value="{{ textvalue }}" selected="{{ textselect }}" range="{{ rangetext }}" 174 onchange="textonchange" 175 oncancel="textoncancel" class="pickertext" show="false"></picker> 176 177 <picker id="picker1" type="date" value="{{ datevalue }}" start="2002-2-5" end="2030-6-5" selected="{{ dateselect }}" 178 lunarswitch="true" 179 onchange="dateonchange" oncancel="dateoncancel" class="pickerdate" show="false"></picker> 180 181 <picker id="picker2" type="time" value="{{ timevalue }}" containsecond="{{ containsecond }}" 182 selected="{{ timeselect }}" hours="12" 183 onchange="timeonchange" oncancel="timeoncancel" class="pickertime" show="false"></picker> 184 185 <picker id="picker3" type="datetime" value="{{ datetimevalue }}" selected="{{ datetimeselect }}" hours="24" 186 lunarswitch="true" 187 onchange="datetimeonchange" oncancel="datetimeoncancel" class="pickerdatetime" show="false"></picker> 188 189 <picker id="picker4" type="multi-text" value="{{ multitextvalue }}" columns="3" range="{{ multitext }}" 190 selected="{{ multitextselect }}" 191 onchange="multitextonchange" oncancel="multitextoncancel" class="pickermuitl" show="false"></picker> 192</div> 193``` 194 195```css 196/* xxx.css */ 197.container { 198 flex-direction: column; 199 justify-content: center; 200 align-items: center; 201} 202 203picker { 204 width: 60%; 205 height: 80px; 206 border-radius: 20px; 207 text-color: white; 208 font-size: 15px; 209 background-color: #4747e3; 210 margin-left: 20%; 211} 212 213select { 214 background-color: #efecec; 215 height: 50px; 216 width: 60%; 217 margin-left: 20%; 218 margin-top: 300px; 219 margin-bottom: 50px; 220 font-size: 22px; 221} 222``` 223 224```js 225// xxx.js 226import promptAction from '@ohos.promptAction'; 227 228export default { 229 data: { 230 selectList: ["text", "data", "time", "datetime", "multitext"], 231 rangetext: ['15', "20", "25"], 232 multitext: [["a", "b", "c"], ["e", "f", "g"], ["h", "i"], ["k", "l", "m"]], 233 textvalue: 'default textvalue', 234 datevalue: 'default datevalue', 235 timevalue: 'default timevalue', 236 datetimevalue: 'default datetimevalue', 237 multitextvalue: 'default multitextvalue', 238 containsecond: true, 239 multitextselect: [1, 2, 0], 240 datetimeselect: '2012-5-6-11-25', 241 timeselect: '11:22:30', 242 dateselect: '2021-3-2', 243 textselect: '2' 244 }, 245 selectChange(e) { 246 for (let i = 0;i < this.selectList.length; i++) { 247 if (e.newValue == this.selectList[i]) { 248 this.$element("picker" + i).show(); 249 } 250 } 251 }, 252 textonchange(e) { 253 this.textvalue = e.newValue; 254 promptAction.showToast({ 255 message: "text:" + e.newValue + ",newSelected:" + e.newSelected 256 }) 257 }, 258 textoncancel(e) { 259 promptAction.showToast({ 260 message: "text: textoncancel" 261 }) 262 }, 263 dateonchange(e) { 264 this.datevalue = e.year + "-" + e.month + "-" + e.day; 265 promptAction.showToast({ 266 message: "date:" + e.year + "-" + (e.month + 1) + "-" + e.day 267 }) 268 }, 269 dateoncancel() { 270 promptAction.showToast({ 271 message: "date: dateoncancel" 272 }) 273 }, 274 timeonchange(e) { 275 if (this.containsecond) { 276 this.timevalue = e.hour + ":" + e.minute + ":" + e.second; 277 promptAction.showToast({ 278 message: "Time:" + e.hour + ":" + e.minute + ":" + e.second 279 }) 280 } else { 281 this.timevalue = e.hour + ":" + e.minute; 282 promptAction.showToast({ 283 message: "Time:" + e.hour + ":" + e.minute 284 }) 285 } 286 }, 287 timeoncancel() { 288 promptAction.showToast({ 289 message: "timeoncancel" 290 }) 291 }, 292 datetimeonchange(e) { 293 this.datetimevalue = e.year + "-" + e.month + "-" + e.day + " " + e.hour + ":" + e.minute; 294 promptAction.showToast({ 295 message: "Time:" + (e.month + 1) + "-" + e.day + " " + e.hour + ":" + e.minute 296 }) 297 }, 298 datetimeoncancel() { 299 promptAction.showToast({ 300 message: "datetimeoncancel" 301 }) 302 }, 303 multitextonchange(e) { 304 this.multitextvalue = e.newValue; 305 promptAction.showToast({ 306 message: "Multi-column text change" + e.newValue 307 }) 308 }, 309 multitextoncancel() { 310 promptAction.showToast({ 311 message: "multitextoncancel" 312 }) 313 }, 314 popup_picker() { 315 this.$element("picker_text").show(); 316 }, 317} 318``` 319 320![zh-cn_image_0000001191939702](figures/zh-cn_image_0000001191939702.gif) 321