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
相关文章推荐
- 安卓选择器类库,包括日期选择器、时间选择器、单项选择器、数字选择器、二三级联动选择器、省市区地址选择器、颜色选择器、文件目录选择器等,可自定义顶部及底部界面,可自定义窗口动画
- Android开发中实现IOS风格底部选择器(支持时间 日期 自定义)
- AndroidIOS风格底部选择器(支持时间,日期,自定义)
- Android自定义View仿IOS圆盘时间选择器
- Android自定义圆盘时间选择器
- Android自定义滚动式时间选择器(在他人基础上修改)
- Android 自定义时间滑轮选择控件
- Android自定义时间控件不可选择未来时间
- android:TimePicker仿照IOS时间选择器,可自定义选择器
- Android自定义时间控件选择开始时间到结束时间
- Android自定义滚轮式日期(时间)选择控件
- android:最简单的方式实现自定义选择时间分钟间隔,非滚轮方式
- Android 自定义View——拖动选择时间控件
- android自定义日期和时间选择对话框得实现
- 轻松实现可扩展自定义的Android滚轮时间选择控件
- Android自定义简易时间选择器
- android自定义实现点击底部选择三角号旋转
- Android滚轮时间选择控件(可扩展自定义)
- 【ios开发】自定义Actionsheet实现时间选择器和省市区选择器
- Android 自定义View 仿圆形时间选择器