之前做了一个小Demo,选择一个日期后,按前进向前一周,按后退向后一周,同理还有日,月,年的,自己在那算了好几个小时,在网上也没找到好一点的demo,今天贴出来,以后开发粘贴复制即可。
需要用到的三方依赖:
implementation 'com.contrarywind:Android-PickerView:4.1.9'
public class Main2Activity extends AppCompatActivity { private TextView tvDate1; private TextView tvDate2; private TextView tvRight; private ImageView ivUp; private ImageView ivDown; private LinearLayout dialogLayout; // private PopupWindow selectPopup; private int index = 0; private Calendar selectedDate; private Calendar startDate; private Calendar endDate; boolean[] week_type = {true, true, true, false, false, false}; boolean[] month_type = {true, true, false, false, false, false}; boolean[] year_type = {true, false, false, false, false, false}; private Date nowWeek; private Date nowWeekSub; private Date nowDay; private Date nowDaySub; private Date nowMonth; private int nowYear; private int nowYearSub; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //左边的 ivUp = (ImageView) findViewById(R.id.ivUp); tvDate1 = (TextView) findViewById(R.id.tvDateOne); //右边的 ivDown = (ImageView) findViewById(R.id.ivDown); tvDate2 = (TextView)findViewById(R.id.tvDateTwo); //控制年,月,日,周账单的 tvRight = (TextView)findViewById(R.id.tvRight); dialogLayout = findViewById(R.id.llselectDate); initView(); tvDate1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = tvRight.getText().toString(); if (s != null) { if (s.equals("日账单")){ selectDate(1,week_type); }else if (s.equals("周账单")){ selectDate(2,week_type); }else if (s.equals("月账单")){ selectDate(3,month_type); }else if (s.equals("年账单")){ selectDate(4,year_type); } } } }); ivUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s1 = tvRight.getText().toString(); if (s1 != null) { if (s1.equals("日账单")){ upDate(1); }else if (s1.equals("周账单")){ upDate(2); }else if (s1.equals("月账单")){ upDate(3); }else if (s1.equals("年账单")){ upDate(4); } } } }); ivDown.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s2 = tvRight.getText().toString(); if (s2 != null) { if (s2.equals("日账单")){ downDate(1); }else if (s2.equals("周账单")){ downDate(2); }else if (s2.equals("月账单")){ downDate(3); }else if (s2.equals("年账单")){ downDate(4); } } } }); } //选择日期 private void selectDate(final int i,boolean []type) { //添加标题 TimePickerView timePickerView = new TimePickerBuilder(Main2Activity.this, new OnTimeSelectListener() { @Override public void onTimeSelect(Date date, View v) { if (i==1){ nowDay = date; String time = new SimpleDateFormat("yyyy-MM-dd").format(date); //现在选择的时间,往后一天 String nextTime = dayAdd(date); try { nowDaySub = new SimpleDateFormat("yyyy-MM-dd").parse(nextTime); } catch (ParseException e) { e.printStackTrace(); } tvDate1.setText(time); tvDate2.setText(nextTime); }else if (i==2){ nowWeek = date; String time = new SimpleDateFormat("yyyy-MM-dd").format(date); //现在选择的时间,往后七天 String nextTime = weekAdd(date); try { nowWeekSub = new SimpleDateFormat("yyyy-MM-dd").parse(nextTime); } catch (ParseException e) { e.printStackTrace(); } tvDate1.setText(time); tvDate2.setText(nextTime); }else if (i==3){ nowMonth = date; String time = new SimpleDateFormat("yyyy-MM").format(date); //现在选择的时间,往后一月 String nextTime = monthAdd(date); tvDate1.setText(time); tvDate2.setText(nextTime); } else if (i==4){ String time = new SimpleDateFormat("yyyy").format(date); nowYear = Integer.parseInt(time); //现在选择的时间,往后一年 String nextTime = yearAdd(nowYear); nowYearSub = Integer.parseInt(nextTime); tvDate1.setText(time); tvDate2.setText(nextTime); } } }) //添加标题 .setTitleText("请选择") .setTitleSize(16) .setCancelColor(Color.parseColor("#656565")) .setSubmitColor(Color.parseColor("#1E90FF")) .setContentTextSize(13) //是否为Dialog样式 .isDialog(true) //显示添加的控件位置 .setDecorView(dialogLayout) //设置时间,数组代表年月日时分秒, .setType(type) //开始和结束年份 .setRangDate(startDate,endDate) //当前选择年份 .setDate(selectedDate) .setItemVisibleCount(4)//可见行数 .setLineSpacingMultiplier(3)//行间距 .setDividerColor(Color.parseColor("#1E90FF")) .build(); timePickerView.show(); } //上一周,日,月,年 private void upDate(final int i){ if (i==1){ try { String right = daySub(nowDaySub); nowDaySub = new SimpleDateFormat("yyyy-MM-dd").parse(right); String left = daySub(nowDaySub); tvDate1.setText(left); tvDate2.setText(right); } catch (ParseException e) { e.printStackTrace(); } }else if (i==2){ try { String right = weekSub(nowWeekSub); nowWeekSub = new SimpleDateFormat("yyyy-MM-dd").parse(right); String left = weekSub(nowWeekSub); tvDate1.setText(left); tvDate2.setText(right); } catch (ParseException e) { e.printStackTrace(); } }else if (i==3){ try { int a = 0; if (a == 0) { String left = monthSub(nowMonth); nowMonth = new SimpleDateFormat("yyyy-MM").parse(left); String right = monthAdd(nowMonth); // showLog("tagaaa"," "+left+" "+right); tvDate1.setText(left); tvDate2.setText(right); a = 1; } else { String right = monthSub(nowMonth); nowMonth = new SimpleDateFormat("yyyy-MM").parse(right); String left = monthSub(nowMonth); // showLog("tagaaa"," "+left+" "+right); tvDate1.setText(left); tvDate2.setText(right); } } catch (ParseException e) { e.printStackTrace(); } }else if (i==4){ String right = yearSub(nowYearSub); nowYearSub = Integer.parseInt(right); String left = yearSub(nowYearSub); tvDate1.setText(left); tvDate2.setText(right); } } //下一周,日,月,年 private void downDate(final int i){ if (i==1){ try { String left = dayAdd(nowDay); nowDay = new SimpleDateFormat("yyyy-MM-dd").parse(left); String right = dayAdd(nowDay); tvDate1.setText(left); tvDate2.setText(right); } catch (ParseException e) { e.printStackTrace(); } }else if (i==2){ try { String left = weekAdd(nowWeek); nowWeek = new SimpleDateFormat("yyyy-MM-dd").parse(left); String right = weekAdd(nowWeek); tvDate1.setText(left); tvDate2.setText(right); } catch (ParseException e) { e.printStackTrace(); } }else if (i==3){ try { String left = monthAdd(nowMonth); nowMonth = new SimpleDateFormat("yyyy-MM").parse(left); String right = monthAdd(nowMonth); tvDate1.setText(left); tvDate2.setText(right); } catch (ParseException e) { e.printStackTrace(); } }else if (i==4){ String left = yearAdd(nowYear); nowYear = Integer.parseInt(left); String right = yearAdd(nowYear); tvDate1.setText(left); tvDate2.setText(right); } } //初始化控件 protected void initView() { tvRight.setVisibility(View.VISIBLE); //这边直接写死了是时间类型 tvRight.setText("周账单"); tvRight.setTextSize(14); //设置当前日期 initDtate(); } private void initDtate() { //当前日期 selectedDate = Calendar.getInstance(); //获取当前年份 int year = selectedDate.get(Calendar.YEAR); //开始日期 startDate = Calendar.getInstance(); //结束日期 endDate = Calendar.getInstance(); //月份是从0-11,日是1-31的 int startYear = year - 1; startDate.set(startYear, 0, 1); endDate.set(year, 11, 31); nowWeek=new Date(System.currentTimeMillis()); nowWeekSub=new Date(System.currentTimeMillis()); tvDate2.setText(new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis())); String nextTime = weekSub(new Date(System.currentTimeMillis())); tvDate1.setText(nextTime); } public String weekAdd(Date date) { Calendar select_week = Calendar.getInstance(); select_week.setTime(date); int i = select_week.get(Calendar.DAY_OF_MONTH) + 7; select_week.set(Calendar.DAY_OF_MONTH, i); Date nextWeek = select_week.getTime(); String nextTime = new SimpleDateFormat("yyyy-MM-dd").format(nextWeek); return nextTime; } public String weekSub(Date date) { Calendar select_week = Calendar.getInstance(); select_week.setTime(date); int i = select_week.get(Calendar.DAY_OF_MONTH) - 7; select_week.set(Calendar.DAY_OF_MONTH, i); Date nextWeek = select_week.getTime(); String nextTime = new SimpleDateFormat("yyyy-MM-dd").format(nextWeek); return nextTime; } public String dayAdd(Date date) { Calendar select_week = Calendar.getInstance(); select_week.setTime(date); int i = select_week.get(Calendar.DAY_OF_MONTH) + 1; select_week.set(Calendar.DAY_OF_MONTH, i); Date nextWeek = select_week.getTime(); String nextTime = new SimpleDateFormat("yyyy-MM-dd").format(nextWeek); return nextTime; } public String daySub(Date date) { Calendar select_week = Calendar.getInstance(); select_week.setTime(date); int i = select_week.get(Calendar.DAY_OF_MONTH) - 1; select_week.set(Calendar.DAY_OF_MONTH, i); Date nextWeek = select_week.getTime(); String nextTime = new SimpleDateFormat("yyyy-MM-dd").format(nextWeek); return nextTime; } public String monthAdd(Date date) { Calendar select_week = Calendar.getInstance(); select_week.setTime(date); int i = select_week.get(Calendar.MONTH); int year = select_week.get(Calendar.YEAR); if (i == 12) { year = select_week.get(Calendar.YEAR) + 1; i = 1; } i++; select_week.set(Calendar.MONTH, i); select_week.set(Calendar.YEAR, year); Date nextWeek = select_week.getTime(); String nextTime = new SimpleDateFormat("yyyy-MM").format(nextWeek); return nextTime; } public String monthSub(Date date) { Calendar select_week = Calendar.getInstance(); select_week.setTime(date); int i = select_week.get(Calendar.MONTH); int year = select_week.get(Calendar.YEAR); if (i == 0) { year = select_week.get(Calendar.YEAR) - 1; i = 12; } i--; select_week.set(Calendar.MONTH, i); select_week.set(Calendar.YEAR, year); Date nextWeek = select_week.getTime(); String nextTime = new SimpleDateFormat("yyyy-MM").format(nextWeek); return nextTime; } public String yearAdd(int now) { now++; return now + ""; } public String yearSub(int now) { now--; return now + ""; } }