離第一篇項目總結《Android 項目總結(1)- 之弧形ViewPager 和弧形HeaderView》過了一週多的時間了,趁今天週末有時間爲你們帶來第二篇:項目中用到的選擇器。java
在咱們的開發過程當中,可能會遇到這樣的需求:給定用戶幾個選項或者讓用戶從某個範圍內選擇須要的值,而不須要用戶本身去手動輸入。典型的場景如:電商APP的收貨地址,用戶選擇省市縣。填寫生日的時候,用戶選擇年月日,或者其餘一些數值得選擇等等。正好最近項目中有相似的功能,所以在此總結記錄總結一下。git
項目中用到的幾個場景:github
1,年月日的選擇ide
2,省市區三級聯動佈局
3,時間選擇ui
4,數值選擇this
若是你須要一個時間選擇器或者省市縣三級聯動的控件,隨便一google ,出來一大把,可是正真能用好用的很少,今天就爲你們推薦一個所用到的開源控件Android-PikerView, 它基本上能知足你項目中全部的選擇:年月日時間選擇、二級聯動、三級聯動、在給定列表中選擇等。google
Github 地址:github.com/Bigkoo/Andr…spa
有以下功能:code
PickerView 中有兩種選擇器:
使用很簡單,採用構造器模式,可配置項不少,能夠根據本身的需求來配置,以下:
pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date,View v) {//選中事件回調
tvTime.setText(getTime(date));
}
})
.setType(new boolean[]{true, true, true, true, true, true})// 默認所有顯示
.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
.setDate(selectedDate)// 若是不設置的話,默認是系統時間*/
.setRangDate(startDate,endDate)//起始終止年月日設定
.setLabel("年","月","日","時","分","秒")//默認設置爲年月日時分秒
.isCenterLabel(false) //是否只顯示中間選中項的label文字,false則每項item所有都帶有label。
.isDialog(true)//是否顯示爲對話框樣式
.build();複製代碼
代碼以下:
TimePickerView pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
mTextViewYear.setText(calendar.get(Calendar.YEAR) + "");
mTextViewMonth.setText(calendar.get(Calendar.MONTH) + 1 + "");// 月份比實際的月份少1個月
mTextViewDay.setText(calendar.get(Calendar.DAY_OF_MONTH) + "");
mBirthday = DateUtils.getDateString(date);
Log.e("TAG", "birth:" + mBirthday);
}
})
.isCenterLabel(false)
.setType(new boolean[]{true, true, true, false, false, false})
.setDate(selectedDate)
.setRangDate(startDate, endDate)
.setTitleText("出生")
.setBgColor(Color.parseColor("#F6F7F6"))
.setTitleSize(getResources().getColor(R.color.text_color_333))
.setSubmitColor(getResources().getColor(R.color.text_color_main))
.setCancelColor(getResources().getColor(R.color.text_color_999))
.build();
pvTime.show();複製代碼
效果以下:
TimePickerView能夠選擇開始日期、結束日期和彈出來時候默認選擇的日期,很方便。
代碼以下:
private void showPickerView() {// 彈出選擇器
OptionsPickerView pvOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
//返回的分別是三個級別的選中位置
mProvince = mProvinceBean.options1Items.get(options1).getPickerViewText();
mCity = mProvinceBean.options2Items.get(options1).get(options2);
mArea = mProvinceBean.options3Items.get(options1).get(options2).get(options3);
setProvinceText();
}
})
.setTitleText("城市選擇")
.setDividerColor(Color.GRAY)
.setTextColorCenter(Color.BLACK) //設置選中項文字顏色
.setContentTextSize(20)
.setBgColor(Color.parseColor("#F6F7F6"))
.setTitleSize(getResources().getColor(R.color.text_color_333))
.setSubmitColor(getResources().getColor(R.color.text_color_main))
.setCancelColor(getResources().getColor(R.color.text_color_999))
.build();
pvOptions.setPicker(mProvinceBean.options1Items, mProvinceBean.options2Items, mProvinceBean.options3Items);//三級選擇器
pvOptions.show();
}複製代碼
效果以下:
代碼以下:
protected void showTimePicker(TimePickerView.OnTimeSelectListener listener) {
if (mTimePicker != null) {
mTimePicker.show();
return;
}
Calendar selectedDate = Calendar.getInstance();
Calendar startDate = Calendar.getInstance();
Calendar endDate = Calendar.getInstance();
//正確設置方式 緣由:注意事項有說明
selectedDate.set(1990, 0, 1);
startDate.set(1949, 0, 1);
// 獲取當前的年、月、日
endDate.setTimeInMillis(System.currentTimeMillis());
mTimePicker = new TimePickerView.Builder(this, listener)
.isCenterLabel(false)
.setType(new boolean[]{false, false, false, true, true, false})
.setDate(selectedDate)
.setRangDate(startDate, endDate)
.setTitleText("測量時間")
.setBgColor(Color.parseColor("#F6F7F6"))
.setTitleSize(getResources().getColor(R.color.text_color_333))
.setSubmitColor(getResources().getColor(R.color.text_color_main))
.setCancelColor(getResources().getColor(R.color.text_color_999))
.build();
mTimePicker.show();
}複製代碼
效果以下:
代碼以下:
mOptionsPickerView = createHighBasePicker(title, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
mBsValue = datas.get(options1).bs;
mItemBloodSugar.setContent(mBsValue + "");
mStatusView.setBSValue(mBsValue);
}
});
mOptionsPickerView.setPicker(datas);
mOptionsPickerView.show();
//createHighBasePicker 方法以下:
protected OptionsPickerView createHighBasePicker(String title, OptionsPickerView.OnOptionsSelectListener listener) {
OptionsPickerView picker = new OptionsPickerView.Builder(this, listener)
.setTitleText(title)
.setBgColor(Color.parseColor("#F6F7F6"))
.setTitleSize(getResources().getColor(R.color.text_color_333))
.setSubmitColor(getResources().getColor(R.color.text_color_main))
.setCancelColor(getResources().getColor(R.color.text_color_999))
.build();
return picker;
}複製代碼
效果以下:
以上就是項目中用到的幾種場景,固然了,功能還不止於此,還有一些二級聯動和自定義樣式的功能沒有演示,須要的同窗能夠去Github 主頁看相關介紹,或者去Demo裏面查看各類選擇器的用法。總的來講是一個很不錯的開源項目,接近6k star。有須要的同窗快去試一下吧!
更多幹貨文章,關注公衆號: