You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将日历每周首日与末日设为白色?代码问题求助

解决日历组件中每周首日的判断问题

我一眼就看出你遇到的问题所在了——你在代码里尝试用Calendar对象直接和int类型的值做比较,这必然会触发类型不匹配的错误!

错误原因解析

GregorianCalendar.getInstance().getFirstDayOfWeek()返回的是一个int类型的常量(比如Calendar.SUNDAY对应1,Calendar.MONDAY对应2),而你代码里的day是一个完整的Calendar实例。用equals()方法去比较对象和基本数据类型,Java编译器肯定会报错。

正确的判断方式

你需要获取day实例中DAY_OF_WEEK字段的值,再和每周首日的int常量做比较。具体来说,把原来的判断条件替换成:

day.get(Calendar.DAY_OF_WEEK) == GregorianCalendar.getInstance().getFirstDayOfWeek()

如果你的calendarProperties类支持配置每周首日(比如允许用户选择周一或周日作为一周开始),更推荐用配置里的值,这样更灵活:

day.get(Calendar.DAY_OF_WEEK) == calendarProperties.getFirstDayOfWeek()

修改后的完整方法代码

public static void setCurrentMonthDayColors(Calendar day, Calendar today, TextView dayLabel, CalendarProperties calendarProperties) {
    Log.i(TAG,"Day: " + day);
    if (today.equals(day)) {
        setDayColors(dayLabel, calendarProperties.getTodayLabelColor(), Typeface.BOLD, R.drawable.background_transparent);
    } else if (EventDayUtils.isEventDayWithLabelColor(day, calendarProperties)) {
        EventDayUtils.getEventDayWithLabelColor(day, calendarProperties).executeIfPresent(eventDay -> DayColorsUtils.setDayColors(dayLabel, eventDay.getLabelColor(), Typeface.NORMAL, R.drawable.background_transparent));
    } else if (calendarProperties.getHighlightedDays().contains(day)) {
        setDayColors(dayLabel, calendarProperties.getHighlightedDaysLabelsColor(), Typeface.NORMAL, R.drawable.background_transparent);
    } else if (day.get(Calendar.DAY_OF_WEEK) == GregorianCalendar.getInstance().getFirstDayOfWeek()) {
        // 匹配每周首日,设置白色文字
        setDayColors(dayLabel, Color.WHITE, Typeface.BOLD, R.drawable.background_transparent);
    } else {
        setDayColors(dayLabel, calendarProperties.getDaysLabelsColor(), Typeface.BOLD, R.drawable.background_transparent);
    }
}

扩展:判断每周末日

如果之后你需要判断每周末日,可以用类似的逻辑,比如通过动态计算来适配不同的每周首日设置:

else if (day.get(Calendar.DAY_OF_WEEK) == ((GregorianCalendar.getInstance().getFirstDayOfWeek() + 5) % 7) + 1) {
    // 设置末日的颜色样式
    setDayColors(dayLabel, /*你想要的颜色值*/, Typeface.BOLD, R.drawable.background_transparent);
}

内容的提问来源于stack exchange,提问作者GGG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:21:43