您的位置:首页 > 移动开发 > Android开发

Android 时间选择框、省市区选择框、自定义底部选择框

2018-01-26 14:50 513 查看

Android 时间、省市区、自定义底部选择框

使用Github上的开源组件:Android-PickerView

使用:

compile 'com.contrarywind:Android-PickerView:3.2.7'


OptionsPickerView 条件选择器

两级选择器:



省市(两级)选择器:

要加区 (三级)则原理同下 变为三级的选择器 加上第三个List的数据即可

OptionsPickerView pvOptions = new  OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
//返回的分别是三个级别的选中位置
String provinceStr= options1Items.get(options1);
String cityStr = options2Items.get(options1).get(option2);
// 设置在你组件上的 选取后得到的内容
province.setText(provinceStr);
city.setText(cityStr);
}
})
//* 使用系统自带的Color文件 也可用自己的值 但是这里的值要注意 颜色值=(65536*Red)+(256*Green)+(Blue) 不能用R.color的形式
.setTitleText("城市选择")
.setContentTextSize(20)                     //设置滚轮文字大小
.setDividerColor(Color.GRAY)              //设置分割线的颜色
.setSelectOptions(0, 0)                  //默认选中项
.setBgColor(Color.WHITE)                // 设置下方选择框的背景颜色
.setTitleBgColor(Color.BLUE)           // 设置标题处整个背景的背景颜色
.setTitleColor(Color.WHITE)           // 设置标题颜色
.setCancelColor(Color.WHITE)         // 设置左边取消按钮颜色
.setSubmitColor(Color.WHITE)        // 设置右边确定按钮颜色
.setTextColorCenter(Color.BLUE)   //  设置下方滚轮选中条目的字体颜色
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
// 只能设为三级  不管显示多少级
.setLabels("省", "市", "区")
.setBackgroundId(0x66000000) //设置外部遮罩颜色 只能用16进制的方式 这里设置为无颜色 只是透明度修改
.build();
/*pvOptions.setPicker(options1Items);//一级选择器*/
pvOptions.setPicker(options1Items, options2Items); //二级选择器
/*pvOptions.setPicker(options1Items, options2Items,options3Items);//三级选择器*/
pvOptions.show();


数据自定义:

final List<String> options1Items = new ArrayList<>();
final List<List<String>> options2Items = new ArrayList<>();
/*final List<List<List<String>>> options3Items = new ArrayList<>();*/
//选项1
options1Items.add("广东");
options1Items.add("湖南");
options1Items.add("广西");
//选项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);


第一级只有一个List (代表省) 第二级 List中嵌套了一个List (代表市)第三级则是三层嵌套 (代表区)

上方的onOptionsSelect会根据点击的不同Item的position进行不同的数据选取

自己根据提供的JSON格式的txt文件去进行数据匹配:

/**
*  点击选择省市列表事件
* @param v
*/
public void openProvincecity(View v) {
final List<String> options1Items = new ArrayList<>();
final List<Integer> options1Key = new ArrayList<>();
final List<List<String>> options2Items = new ArrayList<>();
final List<List<Integer>> options2Pkey = new ArrayList<>();

// 获取所给予的JSON形式的城市数据(以及相对于的pkey)
InputStream is = NewAdd0Activity.this.getResources().openRawResource(R.raw.city);
StringBuilder stringBuilder = new StringBuilder();
try {
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String string = "";
while ((string = br.readLine()) != null) {
stringBuilder.append(string);
}
isr.close();
br.close();
} catch (Exception e1) {
e1.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
// 解析 数据
Gson gson = new Gson();
List<ProvinceCityBean> provinceCityBean = gson.fromJson(stringBuilder.toString(),new TypeToken<List<ProvinceCityBean>>(){}.getType());
// 省
for(int i=0; i<provinceCityBean.size();i++){
options1Items.add(provinceCityBean.get(i).getName());
options1Key.add(provinceCityBean.get(i).getPkey());  // 获取省的Pkey List
List<ProvinceCityBean.CitiesBean> citiesBean = provinceCityBean.get(i).getCities();
ArrayList<String> citiesList = new ArrayList<>();
ArrayList<Integer> citiesPkeyList = new ArrayList<>();
for(int j=0;j<citiesBean.size();j++) {
// 市
citiesList.add(citiesBean.get(j).getName());
citiesPkeyList.add(citiesBean.get(j).getPkey());
}
options2Items.add(citiesList);
options2Pkey.add(citiesPkeyList);
}

OptionsPickerView pvOptions = new  OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
//返回的分别是三个级别的选中位置
String provinceStr= options1Items.get(options1);
provincePkey = options1Key.get(options1);     //选中的省份Pkey
String cityStr = options2Items.get(options1).get(option2);
cityPkey = options2Pkey.get(options1).get(option2); //选中的城市Pkey
// 设置你组件上的 选取后得到的内容
province.setText(provinceStr);
city.setText(cityStr);
}
})
// 颜色值=(65536*Red)+(256*Green)+(Blue) 不能用R.color的形式
.setTitleText("城市选择")
.setContentTextSize(20)                     //设置滚轮文字大小
.setDividerColor(Color.GRAY)              //设置分割线的颜色
.setSelectOptions(0, 0)   //默认选中项
.setBgColor(Color.WHITE)                      // 设置下方选择框的背景颜色
.setTitleBgColor(Color.BLUE)           // 设置标题处整个背景的背景颜色
.setTitleColor(Color.WHITE)              // 设置标题颜色
.setCancelColor(Color.WHITE)    // 设置左边取消按钮颜色
.setSubmitColor(Color.WHITE)    // 设置右边确定按钮颜色
.setTextColorCenter(Color.BLUE)       //  设置下方滚轮选中条目的字体颜色
.isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
// 只能设为三级  不管显示多少级
.setLabels("省", "市", "区")
.setBackgroundId(0x66000000) //设置外部遮罩颜色 只能用16进制的方式 这里设置为无颜色 只是透明度修改
.build();
pvOptions.setPicker(options1Items, options2Items); //二级选择器
pvOptions.show();
}


再给选取后的地点加上各个地方的标识key (pkey)

时间选择器: TimePickerView 使用

设置界限,起始年月日和终止年月日:

Calendar startDate = Calendar.getInstance();
startDate.set(1970, 1, 1);
Calendar endDate = Calendar.getInstance();
endDate.set(2049, 12, 31);


使用;

TimePickerView pvTime = new TimePickerView.Builder(this,
new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
//选中事件回调
// 设置获取的时间的格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
if(p==1){
//若是选择开始时间
beginingTime.setText(df.format(date));
}else {
//若是选择结束时间
endingTime.setText(df.format(date));
}
}
})
/*  .setType(TimePickerView.Type.ALL)//默认全部显示*/
.setType(new boolean[]{true, true, true, true, true, false})//只显示年月日时分不显示秒
.setCancelText("取消")//取消按钮文字
.setSubmitText("确定")//确认按钮文字
.setContentSize(18)//滚轮文字大小
.setTitleSize(20)//标题文字大小
.setTitleText("时间选择")//标题文字
.setOutSideCancelable(true)//点击屏幕,点在控件外部范围时,是否取消显示
.isCyclic(false)//是否循环滚动
.setTitleColor(Color.WHITE)//标题文字颜色
.setSubmitColor(Color.WHITE)//确定按钮文字颜色
.setCancelColor(Color.WHITE)//取消按钮文字颜色
.setTitleBgColor(Color.BLUE)//标题背景颜色
.s
9c57
etBgColor(Color.WHITE)//滚轮背景颜色
.setRangDate(startDate, endDate)//默认是1900-2100年
.setDate(Calendar.getInstance())// 打开默认选择系统时间
.setLabel("年","月","日","时","分","秒")
.build();
pvTime.show();


注意:系统Calendar的月份是从0-11的,如果是调用Calendar的set方法来设置时间,月份的范围为0-11

参考:https://github.com/Bigkoo/Android-PickerView
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: