android日期选择:切换日期显示

问题:

日期选择需求,展示年月和当月所有日期的同时,能够动态切换日期,同时今天要特别显示

分析:

页面元素主要包括,年  月  一个月的天和天对应的星期名

用户操作交互时,

首次进入需要获取当前日期的 年 月 和本月的全部天和星期

点击年月的上下箭头,需要月加减,遇到1月减或者12月加时,需要年份进行增减,同时 月份变化,也需要获取变化后的月天数和对应的星期名 并刷新

特殊需求:注意匹配今天,周显示为今天,同时本日的字变色,加圆背景

解决:

获取今天的日期信息

获取今日的日期信息
Calendar calendar = Calendar.getInstance();

获取上月字符串

//传入保存的Calendar calendar对象
public void getLastMouth(Calendar calendar){
    DateFormat df = new SimpleDateFormat("YYYY/MM");
    calendar.add(Calendar.MONTH, -1);
    date = (Date) calendar.getTime();
    String format = df.format(date);
    System.out.println(format); 
} 

获取下月字符串

//传入保存的Calendar calendar对象
public void getNextMouth(Calendar calendar){
    DateFormat df = new SimpleDateFormat("YYYY/MM");
    calendar.add(Calendar.MONTH, 1);
    date = (Date) calendar.getTime();
    String format = df.format(date);
    System.out.println(format); 
} 

获取对应月天数

    /**
     * 根据年 月 获取对应的月份 天数
        用保存的calendar获取
        calendar.get(Calendar.YEAR);
        calendar.get(Calendar.MOUTH);
     */
    public static int getDaysByYearMonth(int year, int month) {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.YEAR, year);
        a.set(Calendar.MONTH, month - 1);
        a.set(Calendar.DATE, 1);
        a.roll(Calendar.DATE, -1);
        int maxDate = a.get(Calendar.DATE);
        return maxDate;
    } 

获取当天的周数

/**
     * 获取当天的周数
     *
     * @param date
     * @return
     */
    public static String getDaysOfWeek(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int i = calendar.get(Calendar.DAY_OF_WEEK);
        switch (i) {
            case 1:
                return "周天" ;
            case 2:
                return “周一”;
            case 3:
                return “周二”;
            case 4:
                return “周三”;
            case 5:
                return “周四”;
            case 6:
                return “周五”;
            case 7:
                return “周六”;
            default:
                return "";
        }
    }

获取对应天数和周数的逻辑

Canlendar calendar = Canlendar.getInstance();
int monthDays=getDaysByYearMonth(calendar.get(Calendar.YEAR),calendar.get(Calendar.MOUTH));
for (int i = 0; i < monthDays; i++) {
     instance.set(year,month,i+1);
     dateInfoList.add( new DateInfoBean(instance.get(Calendar.YEAR),
                                               instance.get(Calendar.MONTH),
                                               instance.get(Calendar.DAY_OF_MONTH),
              
     DateUtil.getDaysOfWeek(instance.get(Calendar.DAY_OF_WEEK))));
}

这样就能获得当月所有的日期和对应日期的周名称

效果总结:

经过一番分析总结,发现功能并不复杂,主要在于日期的不断交换,ui上很简单,图标按钮和列表组合一下,及时刷新日期数据即可,相信大家也能很快掌握。

发布了58 篇原创文章 · 获赞 10 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_34203714/article/details/101374741
今日推荐