github位址:https://github.com/Bigkoo/Android-PickerView
PickerViewDialog.zip源碼位址:http://download.csdn.net/detail/daidaishuiping/9798681
step1、添加依賴compile 'com.contrarywind:Android-PickerView:3.2.5'
step2、在activity代碼
public class MainActivity extends AppCompatActivity {
private TimePickerView timePickerView;//時間選擇器
private OptionsPickerView optionsPickerView;//條件選擇器
private ArrayList<ProvinceBean> options1Items = new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//最好等資料加載完畢再初始化并顯示,以免資料量大的時候,還未加載完畢就顯示,造成APP崩潰。
initTimePicker();
initOptionData();
initOptionPicker();
}
public void doClick(View view) {
switch (view.getId()) {
case R.id.timePickerBTN:
timePickerView.show(view);
break;
case R.id.optionPickerBTN:
optionsPickerView.show(view);
break;
}
}
/**
* 初始化時間選擇器
*/
private void initTimePicker() {
timePickerView = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//選中事件回調
// 這裡回調過來的v,就是show()方法裡面所添加的 View 參數,如果show的時候沒有添加參數,v則為null
Button btn = (Button) v;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
btn.setText(sdf.format(date));
}
})
.setType(TimePickerView.Type.YEAR_MONTH_DAY)
.setLabel("", "", "", "", "", "") //設定空字元串以隐藏機關提示
.setDividerColor(Color.DKGRAY)
.setContentSize(20)
.setDate(Calendar.getInstance())
.build();
}
/**
* 條件選擇器
*/
private void initOptionPicker() {
//如果是三級關聯的資料 請參照 JsonDataActivity 類裡面的寫法。
optionsPickerView = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
//傳回的分别是三個級别的選中位置
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(options2);
((Button) v).setText(tx);
}
})
.setTitleText("城市選擇")
.setContentTextSize(20)//設定滾輪文字大小
.setDividerColor(Color.GREEN)//設定分割線的顔色
.setSelectOptions(0, 1)//預設選中項
.setBgColor(Color.BLACK)
.setTitleBgColor(Color.DKGRAY)
.setTitleColor(Color.LTGRAY)
.setCancelColor(Color.YELLOW)
.setSubmitColor(Color.YELLOW)
.setTextColorCenter(Color.LTGRAY)
.isCenterLabel(false) //是否隻顯示中間選中項的label文字,false則每項item全部都帶有label。
.setLabels("省", "市", "區")
.build();
/*pvOptions.setPicker(options1Items);//一級選擇器*/
optionsPickerView.setPicker(options1Items, options2Items);//二級選擇器
/*pvOptions.setPicker(options1Items, options2Items,options3Items);//三級選擇器*/
}
/**
* 初始化條件選擇器的資料
*/
private void initOptionData() {
//選項1
options1Items.add(new ProvinceBean(0, "廣東", "描述部分", "其他資料"));
options1Items.add(new ProvinceBean(1, "湖南", "描述部分", "其他資料"));
options1Items.add(new ProvinceBean(2, "廣西", "描述部分", "其他資料"));
//選項2
ArrayList<String> options2Items_01 = new ArrayList<>();
options2Items_01.add("廣州");
options2Items_01.add("佛山");
options2Items_01.add("東莞");
options2Items_01.add("珠海");
ArrayList<String> options2Items_02 = new ArrayList<>();
options2Items_02.add("長沙");
options2Items_02.add("嶽陽");
options2Items_02.add("株洲");
options2Items_02.add("衡陽");
ArrayList<String> options2Items_03 = new ArrayList<>();
options2Items_03.add("桂林");
options2Items_03.add("玉林");
options2Items.add(options2Items_01);
options2Items.add(options2Items_02);
options2Items.add(options2Items_03);
}
}
時間選擇器自定義屬性:
Calendar selectedDate = Calendar.getInstance();
Calendar startDate = Calendar.getInstance();
startDate.set(2013,1,1);
Calendar endDate = Calendar.getInstance();
endDate.set(2020,1,1);
pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date,View v) {//選中事件回調
tvTime.setText(getTime(date));
}
})
.setType(TimePickerView.Type.ALL)//預設全部顯示
.setCancelText("Cancel")//取消按鈕文字
.setSubmitText("Sure")//确認按鈕文字
.setContentSize(18)//滾輪文字大小
.setTitleSize(20)//标題文字大小
.setTitleText("Title")//标題文字
.setOutSideCancelable(false)//點選螢幕,點在控件外部範圍時,是否取消顯示
.isCyclic(true)//是否循環滾動
.setTitleColor(Color.BLACK)//标題文字顔色
.setSubmitColor(Color.BLUE)//确定按鈕文字顔色
.setCancelColor(Color.BLUE)//取消按鈕文字顔色
.setTitleBgColor(0xFF666666)//标題背景顔色 Night mode
.setBgColor(0xFF333333)//滾輪背景顔色 Night mode
.setRange(calendar.get(Calendar.YEAR) - 20, calendar.get(Calendar.YEAR) + 20)//預設是1900-2100年
.setDate(selectedDate)// 如果不設定的話,預設是系統時間*/
.setRangDate(startDate,endDate)//起始終止年月日設定
.setLabel("年","月","日","時","分","秒")
.isCenterLabel(false) //是否隻顯示中間選中項的label文字,false則每項item全部都帶有label。
.isDialog(true)//是否顯示為對話框樣式
.build();
條件選擇器自定義屬性:
pvOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
//傳回的分别是三個級别的選中位置
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(option2)
+ options3Items.get(options1).get(option2).get(options3).getPickerViewText();
tvOptions.setText(tx);
}
})
.setSubmitText("确定")//确定按鈕文字
.setCancelText("取消")//取消按鈕文字
.setTitleText("城市選擇")//标題
.setSubCalSize(18)//确定和取消文字大小
.setTitleSize(20)//标題文字大小
.setTitleColor(Color.BLACK)//标題文字顔色
.setSubmitColor(Color.BLUE)//确定按鈕文字顔色
.setCancelColor(Color.BLUE)//取消按鈕文字顔色
.setTitleBgColor(0xFF333333)//标題背景顔色 Night mode
.setBgColor(0xFF000000)//滾輪背景顔色 Night mode
.setContentTextSize(18)//滾輪文字大小
.setLinkage(false)//設定是否關聯,預設true
.setLabels("省", "市", "區")//設定選擇的三級機關
.isCenterLabel(false) //是否隻顯示中間選中項的label文字,false則每項item全部都帶有label。
.setCyclic(false, false, false)//循環與否
.setSelectOptions(1, 1, 1) //設定預設選中項
.setOutSideCancelable(false)//點選外部dismiss default true
.isDialog(true)//是否顯示為對話框樣式
.build();
pvOptions.setPicker(options1Items, options2Items, options3Items);//添加資料源