|
1 |
| -##(原作者[saiwu-bigkoo](https://github.com/saiwu-bigkoo)吴哥已经转行了,他已把项目转交给我维护,所以我会继续更新优化,不能白白荒废了,欢迎Pull Request,提issue。有兴趣的小伙伴可以加入QQ群:387051294 讨论交流) |
| 1 | +#### [English Document](https://github.com/Bigkoo/Android-PickerView/blob/master/README-en.md) |
| 2 | + |
| 3 | + |
| 4 | +(原作者[saiwu-bigkoo](https://github.com/saiwu-bigkoo)吴哥已经转行了,他已把项目转交给我维护,所以我会继续更新优化,不能白白荒废了,欢迎Pull Request,提issue。有兴趣的小伙伴可以加入QQ群:387051294 讨论交流) |
2 | 5 |
|
3 | 6 |
|
4 | 7 | ## 介绍
|
|
21 | 24 |
|
22 | 25 | ## 有兴趣研究3D滚轮效果的实现机制,希望把源码研究透彻的可以看看这篇[Android-PickerView系列之源码解析篇(二)](http://blog.csdn.net/qq_22393017/article/details/59488906)
|
23 | 26 |
|
24 |
| -## 说明文档 Documentation(还在持续更新中) |
25 |
| -### [English Documentation](https://github.com/Bigkoo/Android-PickerView/wiki/English-Documentation) |
26 | 27 |
|
27 | 28 | ### [中文说明文档(3.x版)](https://github.com/Bigkoo/Android-PickerView/wiki/%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%EF%BC%883.x%E7%89%88%EF%BC%89)
|
28 | 29 |
|
29 | 30 | ### [旧版本(2.x/1.x版)中文说明文档](https://github.com/Bigkoo/Android-PickerView/wiki/%E6%97%A7%E9%A1%B9%E7%9B%AE%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3%EF%BC%88old-version-1.x-2.x%E7%89%88%E6%9C%AC%EF%BC%89)
|
30 | 31 |
|
31 |
| - |
32 | 32 | ## V3.1.1版本更新说明(2017-3-15)
|
33 | 33 | * 修复:timePicker的label单位设置为空,但隐藏无效问题
|
34 | 34 |
|
|
40 | 40 | * 优化:多分辨率适配,修复低分辨率手机下显示偏差问题
|
41 | 41 | * 优化:将系统返回键点击事件封装到BasePickerView,免去在Activity中重写onKeyDown方法。
|
42 | 42 |
|
43 |
| -## V3.0.8版本更新说明(2017-3-7) |
44 |
| -* 修复timepicker只能在初始化时设置一次默认选中时间的问题 |
45 |
| - |
46 |
| -## V3.0.7版本更新说明(2017-3-4) |
47 |
| -* 优化 起始终止年月日范围设置 |
48 |
| -* 新增自定义布局 |
49 |
| - |
50 |
| -## V3.0.6版本更新说明(2017-3-3) |
51 |
| -* 新增对话框模式 |
52 |
| -* 新增timePicker “年月日时分”显示类型 |
53 |
| -* 新增分隔线的显示类型选择(FILL、WARP) |
54 |
| -* 新增options默认选中项的调用方法(可重复设置); |
55 |
| -* 优化选中项显示位置有微小偏差问题 |
56 |
| - |
57 | 43 | ### 历史版本更新说明请查看Wiki
|
58 | 44 |
|
59 | 45 |
|
60 |
| -# How to use |
| 46 | +### 方法名与参数请看这里:[方法名与参数说明文档](https://github.com/Bigkoo/Android-PickerView/wiki/%E6%96%B9%E6%B3%95%E5%90%8D%E4%B8%8E%E5%8F%82%E6%95%B0) |
| 47 | +## **使用步骤:** |
61 | 48 |
|
62 |
| - |
63 |
| -### Gradle |
64 |
| -```java |
65 |
| -compile 'com.contrarywind:Android-PickerView:3.1.1' |
66 |
| -//compile 'com.bigkoo:pickerview:lunar.1.0' Lunar Branch 农历分支 |
67 |
| -``` |
68 |
| -OR |
69 |
| -### Maven |
| 49 | +### 1.添加Jcenter仓库 Gradle依赖: |
70 | 50 | ```java
|
71 |
| -<dependency> |
72 |
| -<groupId>com.contrarywind</groupId> |
73 |
| -<artifactId>Android-PickerView</artifactId> |
74 |
| -<version>3.1.1</version> |
75 |
| -<type>pom</type> |
76 |
| -</dependency> |
| 51 | +compile 'com.contrarywind:Android-PickerView:3.1.0' |
77 | 52 | ```
|
78 | 53 |
|
| 54 | +### 2.在Activity中添加如下代码: |
79 | 55 |
|
80 |
| -## Sample usage: |
81 | 56 | ```java
|
82 |
| -//TimePicker |
83 |
| - pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() { |
| 57 | +//时间选择器 |
| 58 | +TimePickerView pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() { |
84 | 59 | @Override
|
85 | 60 | public void onTimeSelect(Date date,View v) {//选中事件回调
|
86 | 61 | tvTime.setText(getTime(date));
|
87 | 62 | }
|
88 | 63 | })
|
89 | 64 | .build();
|
| 65 | + pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 |
90 | 66 | pvTime.show();
|
| 67 | +``` |
91 | 68 |
|
92 |
| - |
93 |
| -//OptionsPicker |
94 |
| - pvOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() { |
| 69 | +```java |
| 70 | +//条件选择器 |
| 71 | + OptionsPickerView pvOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() { |
95 | 72 | @Override
|
96 | 73 | public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
|
97 | 74 | //返回的分别是三个级别的选中位置
|
|
104 | 81 | pvOptions.setPicker(options1Items, options2Items, options3Items);
|
105 | 82 | pvOptions.show();
|
106 | 83 | ```
|
| 84 | +### 大功告成~ |
| 85 | + |
| 86 | +### 3.如果默认样式不符合你的口味,可以自定义各种属性: |
| 87 | +```java |
| 88 | + Calendar selectedDate = Calendar.getInstance(); |
| 89 | + Calendar startDate = Calendar.getInstance(); |
| 90 | + startDate.set(2013,1,1); |
| 91 | + Calendar endDate = Calendar.getInstance(); |
| 92 | + endDate.set(2020,1,1); |
| 93 | + |
| 94 | + pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() { |
| 95 | + @Override |
| 96 | + public void onTimeSelect(Date date,View v) {//选中事件回调 |
| 97 | + tvTime.setText(getTime(date)); |
| 98 | + } |
| 99 | + }) |
| 100 | + .setType(TimePickerView.Type.ALL)//默认全部显示 |
| 101 | + .setCancelText("Cancel")//取消按钮文字 |
| 102 | + .setSubmitText("Sure")//确认按钮文字 |
| 103 | + .setContentSize(18)//滚轮文字大小 |
| 104 | + .setTitleSize(20)//标题文字大小 |
| 105 | + .setTitleText("Title")//标题文字 |
| 106 | + .setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示 |
| 107 | + .isCyclic(true)//是否循环滚动 |
| 108 | + .setTitleColor(Color.BLACK)//标题文字颜色 |
| 109 | + .setSubmitColor(Color.BLUE)//确定按钮文字颜色 |
| 110 | + .setCancelColor(Color.BLUE)//取消按钮文字颜色 |
| 111 | + .setTitleBgColor(0xFF666666)//标题背景颜色 Night mode |
| 112 | + .setBgColor(0xFF333333)//滚轮背景颜色 Night mode |
| 113 | + .setRange(calendar.get(Calendar.YEAR) - 20, calendar.get(Calendar.YEAR) + 20)//默认是1900-2100年 |
| 114 | + .setDate(selectedDate)// 如果不设置的话,默认是系统时间*/ |
| 115 | + .setRangDate(startDate,endDate)//起始终止年月日设定 |
| 116 | + .setLabel("年","月","日","时","分","秒") |
| 117 | + .isDialog(true)//是否显示为对话框样式 |
| 118 | + .build(); |
| 119 | +``` |
| 120 | + |
| 121 | +```java |
| 122 | +pvOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() { |
| 123 | + @Override |
| 124 | + public void onOptionsSelect(int options1, int option2, int options3 ,View v) { |
| 125 | + //返回的分别是三个级别的选中位置 |
| 126 | + String tx = options1Items.get(options1).getPickerViewText() |
| 127 | + + options2Items.get(options1).get(option2) |
| 128 | + + options3Items.get(options1).get(option2).get(options3).getPickerViewText(); |
| 129 | + tvOptions.setText(tx); |
| 130 | + } |
| 131 | + }) |
| 132 | + .setSubmitText("确定")//确定按钮文字 |
| 133 | + .setCancelText("取消")//取消按钮文字 |
| 134 | + .setTitleText("城市选择")//标题 |
| 135 | + .setSubCalSize(18)//确定和取消文字大小 |
| 136 | + .setTitleSize(20)//标题文字大小 |
| 137 | + .setTitleColor(Color.BLACK)//标题文字颜色 |
| 138 | + .setSubmitColor(Color.BLUE)//确定按钮文字颜色 |
| 139 | + .setCancelColor(Color.BLUE)//取消按钮文字颜色 |
| 140 | + .setTitleBgColor(0xFF333333)//标题背景颜色 Night mode |
| 141 | + .setBgColor(0xFF000000)//滚轮背景颜色 Night mode |
| 142 | + .setContentTextSize(18)//滚轮文字大小 |
| 143 | + .setLinkage(false)//设置是否联动,默认true |
| 144 | + .setLabels("省", "市", "区")//设置选择的三级单位 |
| 145 | + .setCyclic(false, false, false)//循环与否 |
| 146 | + .setSelectOptions(1, 1, 1) //设置默认选中项 |
| 147 | + .setOutSideCancelable(false)//点击外部dismiss default true |
| 148 | + .isDialog(true)//是否显示为对话框样式 |
| 149 | + .build(); |
| 150 | + |
| 151 | + pvOptions.setPicker(options1Items, options2Items, options3Items);//添加数据源 |
| 152 | +``` |
| 153 | +### 4.如果需要自定义布局: |
| 154 | + |
| 155 | +```java |
| 156 | + // 注意:自定义布局中,id为 optionspicker 或者 timepicker 的布局以及其子控件必须要有,否则会报空指针 |
| 157 | + // 具体可参考demo 里面的两个自定义布局 |
| 158 | + pvCustomOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() { |
| 159 | + @Override |
| 160 | + public void onOptionsSelect(int options1, int option2, int options3, View v) { |
| 161 | + //返回的分别是三个级别的选中位置 |
| 162 | + String tx = cardItem.get(options1).getPickerViewText(); |
| 163 | + btn_CustomOptions.setText(tx); |
| 164 | + } |
| 165 | + }) |
| 166 | + .setLayoutRes(R.layout.pickerview_custom_options, new CustomListener() { |
| 167 | + @Override |
| 168 | + public void customLayout(View v) { |
| 169 | + //自定义布局中的控件初始化及事件处理 |
| 170 | + final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish); |
| 171 | + final TextView tvAdd = (TextView) v.findViewById(R.id.tv_add); |
| 172 | + ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel); |
| 173 | + tvSubmit.setOnClickListener(new View.OnClickListener() { |
| 174 | + @Override |
| 175 | + public void onClick(View v) { |
| 176 | + pvCustomOptions.returnData(tvSubmit); |
| 177 | + } |
| 178 | + }); |
| 179 | + ivCancel.setOnClickListener(new View.OnClickListener() { |
| 180 | + @Override |
| 181 | + public void onClick(View v) { |
| 182 | + pvCustomOptions.dismiss(); |
| 183 | + } |
| 184 | + }); |
| 185 | + |
| 186 | + tvAdd.setOnClickListener(new View.OnClickListener() { |
| 187 | + @Override |
| 188 | + public void onClick(View v) { |
| 189 | + getData(); |
| 190 | + pvCustomOptions.setPicker(cardItem); |
| 191 | + } |
| 192 | + }); |
| 193 | + |
| 194 | + } |
| 195 | + }) |
| 196 | + .build(); |
| 197 | + pvCustomOptions.setPicker(cardItem);//添加数据 |
| 198 | +``` |
| 199 | + |
| 200 | +## 5.对使用还有疑问的话,可参考Demo代码 |
| 201 | +[请戳我查看demo代码](https://github.com/Bigkoo/Android-PickerView/blob/master/app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java) |
107 | 202 |
|
108 |
| -# 详细使用请参考这里 |
109 |
| -## [请戳我查看例示代码](https://github.com/Bigkoo/Android-PickerView/blob/master/app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java) |
110 | 203 |
|
111 | 204 |
|
112 | 205 | ## 效果图(招行信用卡的“掌上生活”里面条件选择器他们用的就是我这个库,大家可以当实际项目参考)
|
|
0 commit comments