目录
简要介绍
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
,在用户选择日期时触发相关效果(例:选择日期背景颜色改变)
获得具体日期
在主活动中,为其添加监听事件后
可以通过 day
, month
, dayOfMonth
来获得用户选择的日期的具体信息:
具体实现代码
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();
}
});
}
}