今天介绍的一款是能实现时间和省市区地址以及条件选择器第三方开源库
名叫Android-PickerView 这款目前是最受欢迎的,大家可以自行去github官网下载,现在我给大家介绍下如何使用,官网也有demo。
先导入库到eclipse中(我用的还是eclipse,AS直接关联就行)导入库中会报错,把int改成Integer就行,我们只选择地址选择器进行演示。
涉及类有两个,已经在图片中指出,其中的布局我们可以自定义
解析来看代码
关联库,代码中先初始化省市区这些数据,本代码中只列了几个,真正项目中还需要从服务器获取
private ArrayList<ProvinceBean> options1Items
= new ArrayList<>();
private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();
private ArrayList<ArrayList<ArrayList<IPickerViewData>>> options3Items = new ArrayList<>();
private ArrayList<CardBean> cardItem = new ArrayList<>();
private void initOptionData() {
//getData();
// 选项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("阳江");
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);
// 选项3
ArrayList<ArrayList<IPickerViewData>> options3Items_01 = new ArrayList<>();
ArrayList<ArrayList<IPickerViewData>> options3Items_02 = new ArrayList<>();
ArrayList<ArrayList<IPickerViewData>> options3Items_03 = new ArrayList<>();
// 广东的地区
ArrayList<IPickerViewData> options3Items_01_01 = new ArrayList<>();
options3Items_01_01.add(new PickerViewData("天河"));
options3Items_01_01.add(new PickerViewData("海珠"));
options3Items_01_01.add(new PickerViewData("越秀"));
options3Items_01_01.add(new PickerViewData("荔湾"));
options3Items_01_01.add(new PickerViewData("花都"));
options3Items_01_01.add(new PickerViewData("番禺"));
options3Items_01_01.add(new PickerViewData("萝岗"));
options3Items_01.add(options3Items_01_01);
ArrayList<IPickerViewData> options3Items_01_02 = new ArrayList<>();
options3Items_01_02.add(new PickerViewData("南海"));
options3Items_01_02.add(new PickerViewData("高明"));
options3Items_01_02.add(new PickerViewData("禅城"));
options3Items_01_02.add(new PickerViewData("桂城"));
options3Items_01.add(options3Items_01_02);
ArrayList<IPickerViewData> options3Items_01_03 = new ArrayList<>();
options3Items_01_03.add(new PickerViewData("其他"));
options3Items_01_03.add(new PickerViewData("常平"));
options3Items_01_03.add(new PickerViewData("虎门"));
options3Items_01.add(options3Items_01_03);
ArrayList<IPickerViewData> options3Items_01_04 = new ArrayList<>();
options3Items_01_04.add(new PickerViewData("其他"));
options3Items_01_04.add(new PickerViewData("其他"));
options3Items_01_04.add(new PickerViewData("其他"));
options3Items_01.add(options3Items_01_04);
ArrayList<IPickerViewData> options3Items_01_05 = new ArrayList<>();
options3Items_01_05.add(new PickerViewData("其他1"));
options3Items_01_05.add(new PickerViewData("其他2"));
options3Items_01.add(options3Items_01_05);
// 湖南的地区
ArrayList<IPickerViewData> options3Items_02_01 = new ArrayList<>();
options3Items_02_01.add(new PickerViewData("长沙1"));
options3Items_02_01.add(new PickerViewData("长沙2"));
options3Items_02_01.add(new PickerViewData("长沙3"));
options3Items_02.add(options3Items_02_01);
ArrayList<IPickerViewData> options3Items_02_02 = new ArrayList<>();
options3Items_02_02.add(new PickerViewData("岳阳1"));
options3Items_02_02.add(new PickerViewData("岳阳2"));
options3Items_02_02.add(new PickerViewData("岳阳3"));
options3Items_02.add(options3Items_02_02);
ArrayList<IPickerViewData> options3Items_02_03 = new ArrayList<>();
options3Items_02_03.add(new PickerViewData("株洲1"));
options3Items_02_03.add(new PickerViewData("株洲2"));
options3Items_02_03.add(new PickerViewData("株洲3"));
options3Items_02.add(options3Items_02_03);
ArrayList<IPickerViewData> options3Items_02_04 = new ArrayList<>();
options3Items_02_04.add(new PickerViewData("衡阳1"));
options3Items_02_04.add(new PickerViewData("衡阳2"));
options3Items_02_04.add(new PickerViewData("衡阳3"));
options3Items_02.add(options3Items_02_04);
// 广西的地区
ArrayList<IPickerViewData> options3Items_03_01 = new ArrayList<>();
options3Items_03_01.add(new PickerViewData("阳朔"));
options3Items_03.add(options3Items_03_01);
ArrayList<IPickerViewData> options3Items_03_02 = new ArrayList<>();
options3Items_03_02.add(new PickerViewData("北流"));
options3Items_03.add(options3Items_03_02);
// 将数据分别添加到一二三项的数组去
options3Items.add(options3Items_01);
options3Items.add(options3Items_02);
options3Items.add(options3Items_03);
/*--------数据源添加完毕---------*/
}
接下来实现调用实现类以及设置样式
private void initOptionPicker() {// 条件选择器初始化
pvOptions = 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)
+ options3Items.get(options1).get(options2).get(options3).getPickerViewText();
btn_Options.setText(tx);
}
})
.setDividerType(WheelView.DividerType.WRAP)
.setTextColorCenter(Color.BLACK) // 设置选中项文字颜色
.setContentTextSize(20)// 设置滚轮文字大小
.setSelectOptions(0, 1, 2) // 设置默认选中项
.build();
pvOptions.setPicker(options1Items, options2Items, options3Items);// 三级选择器
}
接下来就是点击事件设置
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_Options:
initOptionData();
initOptionPicker(); //顺序不能颠倒
pvOptions.show(); // 弹出条件选择器
break;
default:
break;
}
好了看下效果,我们 也可以实现两列的,在于setPicker()这个方法是几个参数的,同样能实现条件选择器类型银行类型选择的效果,功能蛮强大
本文思考:
1.是scollview或者listview或者自定义view实现
2.怎么实现联动
找个时间研究下源代码