• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# picker-view
2
3>  **说明:**
4>  从API version 4开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
5
6嵌入页面的滑动选择器。
7
8
9## 子组件
10
11不支持。
12
13
14## 属性
15
16除支持[通用属性](../arkui-js/js-components-common-attributes.md)外,还支持如下属性:
17
18| 名称   | 类型     | 默认值  | 必填   | 描述                                       |
19| ---- | ------ | ---- | ---- | ---------------------------------------- |
20| type | string | text | 否    | 设置滑动选择器的类型,该属性不支持动态修改,可选项有:<br/>-&nbsp;text:文本选择器。<br/>-&nbsp;time:时间选择器。<br/>-&nbsp;date:日期选择器。<br/>-&nbsp;datetime:日期时间选择器。<br/>-&nbsp;multi-text:多列文本选择器。 |
21
22### 文本选择器
23
24| 名称              | 类型     | 默认值  | 必填   | 描述                                       |
25| --------------- | ------ | ---- | ---- | ---------------------------------------- |
26| range           | Array  | -    | 否    | 设置文本选择器的取值范围。<br/>使用时需要使用数据绑定的方式`range ={{data}}`,js中声明相应变量`data:["15","20","25"]`。 |
27| selected        | string | 0    | 否    | 设置文本选择器的默认选择值,该值需要为range的索引。             |
28| indicatorprefix | string | -    | 否    | 文本选择器选定值增加的前缀字段。                         |
29| indicatorsuffix | string | -    | 否    | 文本选择器选定值增加的后缀字段。                         |
30
31### 时间选择器
32
33| 名称            | 类型      | 默认值                                 | 必填   | 描述                                       |
34| ------------- | ------- | ----------------------------------- | ---- | ---------------------------------------- |
35| containsecond | boolean | false                               | 否    | 时间选择器是否包含秒。                              |
36| selected      | string  | 当前时间                                | 否    | 设置时间选择器的默认取值,格式为&nbsp;HH:mm;<br/>当包含秒时,格式为HH:mm:ss。 |
37| hours         | number  | 24<sup>1-4</sup><br/>-<sup>5+</sup> | 否    | 设置时间选择器采用的时间格式,可选值:<br/>-&nbsp;12:按照12小时制显示,用上午和下午进行区分;<br/>-&nbsp;24:按照24小时制显示。<br/>从API Version 5开始,默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。 |
38
39### 日期选择器
40
41| 名称                 | 类型           | 默认值        | 必填   | 描述                                       |
42| ------------------ | ------------ | ---------- | ---- | ---------------------------------------- |
43| start              | &lt;time&gt; | 1970-1-1   | 否    | 设置日期选择器的起始时间,格式为&nbsp;YYYY-MM-DD。        |
44| end                | &lt;time&gt; | 2100-12-31 | 否    | 设置日期选择器的结束时间,格式为&nbsp;YYYY-MM-DD。        |
45| selected           | string       | 当前日期       | 否    | 设置日期选择器的默认选择值,格式为&nbsp;YYYY-MM-DD。       |
46| lunar<sup>5+</sup> | boolean      | false      | 否    | 设置日期选择器弹窗界面是否为农历展示。                      |
47| lunarswitch        | boolean      | false      | 否    | 设置日期选择器是否显示农历开关,显示农历开关时,可以在弹窗界面展现农历的开关由于公历和农历切换。在设置显示农历时,开关状态为开,当设置不显示农历时,开关状态为关。 |
48
49### 日期时间选择器
50
51| 名称                 | 类型      | 默认值                                 | 必填   | 描述                                       |
52| ------------------ | ------- | ----------------------------------- | ---- | ---------------------------------------- |
53| selected           | string  | 当前日期时间                              | 否    | 设置日期时间选择器的默认取值,格式有两种,为月日时分MM-DD-HH-mm或者年月日时分YYYY-MM-DD-HH-mm,不设置年时,默认使用当前年,该取值表示选择器弹窗时弹窗界面的默认选择值。 |
54| hours              | number  | 24<sup>1-4</sup><br/>-<sup>5+</sup> | 否    | 设置日期时间选择器采用的时间格式,可选值:<br/>-&nbsp;12:按照12小时制显示,用上午和下午进行区分;<br/>-&nbsp;24:按照24小时制显示。<br/>从API Version 5开始,默认值会依据系统当前所选地区和语言选择当地习惯的小时制(12小时制或24小时制)。 |
55| lunar<sup>5+</sup> | boolean | false                               | 否    | 设置日期时间选择器弹窗界面是否为农历展示。                    |
56| lunarswitch        | boolean | false                               | 否    | 设置日期时间选择器是否显示农历开关,显示农历开关时,可以在弹窗界面展现农历的开关由于公历和农历切换。在设置显示农历时,开关状态为开,当设置不显示农历时,开关状态为关。 |
57
58### 多列文本选择器
59
60| 名称       | 类型      | 默认值       | 必填   | 描述                                       |
61| -------- | ------- | --------- | ---- | ---------------------------------------- |
62| columns  | number  | -         | 是    | 设置多列文本选择器的列数。                            |
63| range    | 二维Array | -         | 否    | 设置多列文本选择器的选择值,该值为二维数组。长度表示多少列,数组的每项表示每列的数据,如&nbsp;&nbsp;[["a","b"],&nbsp;["c","d"]]。<br/>使用时需要使用数据绑定的方式`range ={{data}}`,js中声明相应变量`data:["15","20","25"]`。 |
64| selected | Array   | [0,0,0,…] | 否    | 设置多列文本选择器的默认值,每一列被选中项对应的索引构成的数组,该取值表示选择器弹窗时弹窗界面的默认选择值。 |
65
66
67## 样式
68
69除支持[通用样式](../arkui-js/js-components-common-styles.md)外,还支持如下样式:
70
71| 名称                               | 类型             | 默认值        | 必填   | 描述                                       |
72| -------------------------------- | -------------- | ---------- | ---- | ---------------------------------------- |
73| color                            | &lt;color&gt;  | \#ffffff   | 否    | 候选项字体颜色。                                 |
74| font-size                        | &lt;length&gt; | 16px       | 否    | 候选项字体尺寸,类型length,单位px。                   |
75| selected-color                   | &lt;color&gt;  | #ff0a69f7  | 否    | 选中项字体颜色。                                 |
76| selected-font-size               | &lt;length&gt; | 20px       | 否    | 选中项字体尺寸,类型length,单位px。                   |
77| disappear-color<sup>5+</sup>     | &lt;color&gt;  | \#ffffff   | 否    | 渐变消失项的字体颜色。消失项是在一列中有五个选项场景下最上和最下的两个选项。   |
78| disappear-font-size<sup>5+</sup> | &lt;length&gt; | 14px       | 否    | 渐变消失项的字体尺寸。消失项是在一列中有五个选项场景下最上和最下的两个选项。   |
79| font-family                      | string         | sans-serif | 否    | 选项字体类型。字体列表,用逗号分隔,每个字体用字体名或者字体族名设置。列表中第一个系统中存在的或者通过[自定义字体](../arkui-js/js-components-common-customizing-font.md)指定的字体,会被选中作为文本的字体。 |
80
81
82## 事件
83
84仅支持如下事件:
85
86### 文本选择器
87
88| 名称     | 参数                                       | 描述              |
89| ------ | ---------------------------------------- | --------------- |
90| change | {&nbsp;newValue:&nbsp;newValue,&nbsp;newSelected:&nbsp;newSelected&nbsp;} | 文本选择器选定值后触发该事件。 |
91
92### 时间选择器
93
94| 名称     | 参数                                       | 描述                              |
95| ------ | ---------------------------------------- | ------------------------------- |
96| change | {&nbsp;hour:&nbsp;hour,&nbsp;minute:&nbsp;minute,&nbsp;[second:second]} | 时间选择器选定值后触发该事件。<br/>包含秒时,返回时分秒。 |
97
98### 日期选择器
99
100| 名称     | 参数                                       | 描述              |
101| ------ | ---------------------------------------- | --------------- |
102| change | {&nbsp;year:year,&nbsp;month:month,&nbsp;day:day&nbsp;} | 日期选择器选择值后触发该事件。 |
103
104### 日期时间选择器
105
106| 名称     | 参数                                       | 描述                |
107| ------ | ---------------------------------------- | ----------------- |
108| change | {&nbsp;year:year,&nbsp;month:month,&nbsp;day:day,&nbsp;&nbsp;hour:hour,&nbsp;minute:minute&nbsp;} | 日期时间选择器选择值后触发该事件。 |
109
110### 多列文本选择器
111
112| 名称           | 参数                                       | 描述                                       |
113| ------------ | ---------------------------------------- | ---------------------------------------- |
114| columnchange | {&nbsp;column:column,&nbsp;newValue:newValue,&nbsp;newSelected:newSelected&nbsp;} | 多列文本选择器某一列的值改变时触发该事件,column:第几列修改,newValue:选中的值,newSelected:选中值对应的索引。 |
115
116
117## 方法
118
119不支持。
120
121
122## 示例
123### 文本选择器
124
125```html
126<!-- xxx.hml -->
127<div class="container">
128    <text class="title">
129        选中值:{{value}}  选中下标: {{index}}
130    </text>
131    <picker-view class="text-picker" type="text" range="{{options}}" selected="0" indicatorprefix="prefix" indicatorsuffix="suffix" @change="handleChange"></picker-view>
132</div>
133```
134
135```css
136/* xxx.css */
137.container {
138    flex-direction: column;
139    justify-content: center;
140    align-items: center;
141    width: 100%;
142    height: 50%;
143}
144.title {
145    font-size: 30px;
146    text-align: center;
147    margin-top: 50%;
148}
149```
150
151```js
152/* xxx.js */
153export default {
154    data: {
155        options: ['选项1', '选项2', '选项3'],
156        value: "选项1",
157        index: 0
158    },
159    handleChange(data) {
160        this.value = data.newValue;
161        this.index = data.newSelected;
162    },
163}
164```
165![picker-view0](figures/pickerview1.gif)
166
167### 时间选择器
168
169```html
170<!-- xxx.hml -->
171<div class="container">
172  <text class="title">
173    Selected:{{time}}
174  </text>
175  <picker-view class="time-picker" type="time" selected="{{defaultTime}}" @change="handleChange"></picker-view>
176</div>
177```
178
179```css
180/* xxx.css */
181.container {
182    flex-direction: column;
183    justify-content: center;
184    align-items: center;
185    width: 100%;
186    height: 50%;
187}
188.title {
189    font-size: 31px;
190    text-align: center;
191    margin-top: 50%;
192}
193```
194
195```js
196/* xxx.js */
197export default {
198  data: {
199    defaultTime: "",
200    time: "",
201  },
202  onInit() {
203    this.defaultTime = this.now();
204  },
205  handleChange(data) {
206    this.time = this.concat(data.hour, data.minute);
207  },
208  now() {
209    const date = new Date();
210    const hours = date.getHours();
211    const minutes = date.getMinutes();
212    return this.concat(hours, minutes);
213  },
214  fill(value) {
215    return (value > 9 ? "" : "0") + value;
216  },
217  concat(hours, minutes) {
218    return `${this.fill(hours)}:${this.fill(minutes)}`;
219  },
220}
221```
222
223![picker-view1](figures/pickerview2.gif)
224
225### 日期选择器
226
227```html
228<!-- xxx.hml -->
229<div class="container">
230    <text class="title">
231        Selected:{{date}}
232    </text>
233    <picker-view class="time-picker" type="date" selected="{{defaultTime}}" @change="handleChange" lunarswitch="true"></picker-view>
234</div>
235```
236
237```css
238/* xxx.css */
239.container {
240    flex-direction: column;
241    justify-content: center;
242    align-items: center;
243    width: 100%;
244    height: 50%;
245}
246.title {
247    font-size: 31px;
248    text-align: center;
249    margin-top: 50%;
250}
251```
252
253```js
254/* xxx.js */
255export default {
256    data: {
257        date: "",
258    },
259    handleChange(data) {
260        this.date = data.year + "年" + data.month + "月" + data.day + "日";
261    },
262}
263```
264![picker-view2](figures/pickerview3.gif)
265
266### 日期时间选择器
267
268```html
269<!-- xxx.hml -->
270<div class="container">
271    <text class="title">
272        Selected:{{datetime}}
273    </text>
274    <picker-view class="date-picker" type="datetime"  hours="24" lunarswitch="true" @change="handleChange"></picker-view>
275</div>
276```
277
278```css
279/* xxx.css */
280.container {
281    flex-direction: column;
282    justify-content: center;
283    align-items: center;
284    width: 100%;
285    height: 50%;
286}
287.title {
288    font-size: 31px;
289    text-align: center;
290    margin-top: 50%;
291}
292```
293
294```js
295/* xxx.js */
296export default {
297    data: {
298        datetime: "",
299    },
300    handleChange(data) {
301        this.datetime = data.year + "年" + data.month + "月" + data.day + "日" + data.hour + "时" + data.minute + "分";
302    },
303}
304```
305![picker-view3](figures/pickerview4.gif)
306
307### 多列文本选择器
308
309```html
310<!-- xxx.hml -->
311<div class="container">
312    <text class="title">
313        Selected:{{ value }}
314    </text>
315    <picker-view class="multitype-picker" type="multi-text" columns="3" range="{{ multitext }}" @columnchange="handleChange"></picker-view>
316</div>
317```
318
319```css
320/* xxx.css */
321.container {
322    flex-direction: column;
323    justify-content: center;
324    align-items: center;
325    width: 100%;
326    height: 50%;
327}
328.title {
329    font-size: 31px;
330    text-align: center;
331    margin-top: 50%;
332}
333```
334
335```js
336/* xxx.js */
337export default {
338    data: {
339        multitext: [
340            [1, 2, 3],
341            [4, 5, 6],
342            [7, 8, 9],
343        ],
344        value: ""
345    },
346    handleChange(data) {
347        this.value = data.column + "列," + "值为" + data.newValue + ",下标为" + data.newSelected;
348    },
349}
350```
351![picker-view4](figures/pickerview5.gif)