PickerView時間選擇器和條件選擇器
阿新 • • 發佈:2019-01-26
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);//新增資料來源