关于Android日历视图控件CalendarView

本文介绍了Android的CalendarView控件,特点包括高性能、高度自定义和多种选择模式。通过代码示例展示了如何实现日历选择、监听事件、获取日期信息以及自定义属性。此外,还探讨了其插拔式设计,允许动态更换视图以创建独特日历样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简要介绍

CalendarView是Android上一个优雅、高度自定义、性能高效的日历控件,完美支持周视图,支持标记、自定义颜色、农历等,任意控制月视图显示、任意日期拦截条件、自定义周起始等。


CalendarView 的特性

  • 基于Canvas绘制,极速性能
  • 热插拔思想,任意定制周视图、月视图,即插即用
  • 支持单选、多选、范围选择、国内手机日历默认自动选择等选择模式
  • 支持静态、动态设置周起始,一行代码搞定
  • 支持静态、动态设置日历项高度、日历填充模式
  • 支持设置任意日期范围、任意拦截日期
  • 支持多点触控、手指平滑切换过渡,拒绝界面抖动
  • 类NestedScrolling特性,嵌套滚动
  • 既然这么多支持,那一定支持英语、繁体、简体,任意定制实现




简要实现代码与效果演示

下面展示CalendarView最简单的使用方法

<CalendarView
        android:id="@+id/calendarView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />

实现效果:
在这里插入图片描述




ClendarView常见属性及方法



属性 说明
android:dateTextAppearance="" 设置该日历视图的日期文字的样式
android:firstDayOfWeek="" 设置每周第一天,允许设置周一到周日任意一天作为每周的第一天
android:maxDate="" 设置该日历组件支持的最大日期,以mm/dd/yyyy格式设置指定最大日期
android:minDate="" 设置该日历组件支持的最小日期,以mm/dd/yyyy格式设置指定最小日期
android:background="" 设置整体背景颜色/图片
android:weekDayTextAppearance 工作日的文本出现在日历标题缩写



方法 说明
boolean isWeekend() 判断是不是周末,可以用不同的画笔绘制周末的样式
int getWeek() 获取星期
String getSolarTerm() 获取24节气,可以用不同颜色标记不同节日
String getGregorianFestival() 获取公历节日,自由判断,把节日换上喜欢的颜色
String getTraditionFestival() 获取传统节日
boolean isLeapYear() 是否是闰年
int getLeapMonth() 获取闰月
boolean isSameMonth(Calendar calendar) 是否相同月
int compareTo(Calendar calendar) 比较日期大小
long getTimeInMillis() 获取时间戳
int differ(Calendar calendar) 日期运算,相差多少天




简单实现日期选择

添加监听事件

在主活动中添加监听事件CalendarView.OnDateChangeListener ,在用户选择日期时触发相关效果(例:选择日期背景颜色改变)

获得具体日期

在主活动中,为其添加监听事件后

可以通过 daymonthdayOfMonth 来获得用户选择的日期的具体信息:

具体实现代码

public class MainActivity extends AppCompatActivity{
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CalendarView calendarview = (CalendarView) findViewById(R.id.calendarview);

        calendarview.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
   
            @Override
            public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
   
                Toast.makeText(MainActivity.this,"您选择的时间是:"+ year + "年" + month + "月" + dayOfMonth + "日",Toast.LENGTH_SHORT).show();
            }
        });
    }
}



实现效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

greyzz3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值