这个使用还是挺简单的,如果项目中多次使用的话,感觉还是比较麻烦的,我给封装起来了 Guthub上官网地址: https://github.com/Bigkoo/Android-PickerView
依赖
api 'com.contrarywind:Android-PickerView:3.2.7'//选择器
/*===========日期选择器=================*/
TimePicker类
public class TimePicker {
/*
* 时间选择器
* */
public static void initTimePicker(Context context, TextView textview) {//选择出生年月日
//控制时间范围(如果不设置范围,则使用默认时间1900-2100年,此段代码可注释)
//因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
Date curDate = new Date(2025,1,1);//获取当前时间
SimpleDateFormat formatter_year = new SimpleDateFormat("yyyy ");
String year_str = formatter_year.format(curDate);
int year_int = (int) Double.parseDouble(year_str);
SimpleDateFormat formatter_mouth = new SimpleDateFormat("MM ");
String mouth_str = formatter_mouth.format(curDate);
int mouth_int = (int) Double.parseDouble(mouth_str);
SimpleDateFormat formatter_day = new SimpleDateFormat("dd ");
String day_str = formatter_day.format(curDate);
int day_int = (int) Double.parseDouble(day_str);
SimpleDateFormat xiaoshi = new SimpleDateFormat("HH ");
String day_h = xiaoshi.format(curDate);
int h_int = (int) Double.parseDouble(day_h);
Calendar selectedDate = Calendar.getInstance();//系统当前时间
Calendar startDate = Calendar.getInstance();
startDate.set(1900, 0, 0);
Calendar endDate = Calendar.getInstance();
endDate.set(year_int, mouth_int - 1, day_int,h_int,0);
//时间选择器
TimePickerView pvTime1 = new TimePickerView.Builder(context, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//选中事件回调
// 这里回调过来的v,就是show()方法里面所添加的 View 参数,如果show的时候没有添加参数,v则为null
textview.setText(getTime(date));
}
})
.setType(new boolean[]{true, true, true, true, false, false}) //年月日时分秒 的显示与否,不设置则默认全部显示
.setLabel("年", "月", "日", "时", "分", "")//默认设置为年月日时分秒
.isCenterLabel(false)
.setDividerColor(context.getResources().getColor(R.color.black3))//black3 颜色值 #333333
.setTextColorCenter(context.getResources().getColor(R.color.black3))//设置选中项的颜色 black3 颜色值 #333333
.setTextColorOut(context.getResources().getColor(R.color.grey9))//设置没有被选中项的颜色 grey9 颜色值 #999999
.setContentSize(21)
.setDate(selectedDate)
.setLineSpacingMultiplier(1.2f)
.setTextXOffset(0, 0,0, 0, 0, 0)//设置X轴倾斜角度[ -90 , 90°]
.setRangDate(startDate, endDate)
.setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色
.setDecorView(null)
.build();
pvTime1.show();
}
public static String getTime(Date date) {//可根据需要自行截取数据显示
// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return format.format(date);
}
}
调用方式:
TimePicker.initTimePicker(context,holder.text_time);
/*===========城市选择器=================*/
CityUtils类
public class CityUtils {
// 省
private static List options1Items = new ArrayList();
// 市
private static ArrayList> options2Items = new ArrayList<>();
// 区
private static ArrayList>> options3Items = new ArrayList<>();
/**
* 解析数据并组装成自己想要的list
*/
public static void parseData(Context context, TextView textView){
String jsonStr = new GetJsonDataUtil().getJson(context, "province.json");//获取assets目录下的json文件数据
// 数据解析
Gson gson =new Gson();
java.lang.reflect.Type type =new TypeToken>(){}.getType();
ListshengList=gson.fromJson(jsonStr, type);
// 把解析后的数据组装成想要的list
options1Items = shengList;
// 遍历省
for(int i = 0; i cityList = new ArrayList<>();
// 存放区
ArrayList> province_AreaList = new ArrayList<>();
// 遍历市
for(int c = 0; c city_AreaList = new ArrayList<>();//该城市的所有地区列表
if (shengList.get(i).city.get(c).area == null || shengList.get(i).city.get(c).area.size() == 0) {
city_AreaList.add("");
} else {
city_AreaList.addAll(shengList.get(i).city.get(c).area);
}
province_AreaList.add(city_AreaList);
}
/**
* 添加城市数据
*/
options2Items.add(cityList);
/**
* 添加地区数据
*/
options3Items.add(province_AreaList);
}
OptionsPickerView pvOptions =new OptionsPickerView.Builder(context, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 , View v) {
//返回的分别是三个级别的选中位置
String tx = options1Items.get(options1).name +
options2Items.get(options1).get(option2) +
options3Items.get(options1).get(option2).get(options3);
textView.setText(tx);
}
})
.setTitleText("城市选择")
.setDividerColor(Color.BLACK)
.setTextColorCenter(Color.BLACK) //设置选中项文字颜色
.setContentTextSize(20)
.build();
pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
pvOptions.show();
}
}
读取Json文件的工具类 GetJsonDataUtil:
/**
* <读取Json文件的工具类>
*
*/
public class GetJsonDataUtil {
public String getJson(Context context,String fileName) {
StringBuilder stringBuilder = new StringBuilder();
try {
AssetManager assetManager = context.getAssets();
BufferedReader bf = new BufferedReader(new InputStreamReader(
assetManager.open(fileName)));
String line;
while ((line = bf.readLine()) != null) {
stringBuilder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
}
ShengBean类:
public class ShengBean implements IPickerViewData {
public String name;
public List city;
public static class Shi{
public String name;
public Listarea;
}
// 这个要返回省的名字
@Override
public String getPickerViewText() {
return this.name;
}
}
//新建assets目录 然后去github拷贝 province.json文件
使用方式:
CityUtils.parseData(this,occupation) //上下文,控件ID