irpas技术客

关于Android日历视图控件CalendarView_greyzz3_calendarview

irpas 5903

目录 简要介绍CalendarView 的特性 简要实现代码与效果演示ClendarView常见属性及方法简单实现日期选择添加监听事件获得具体日期具体实现代码实现效果 ClendarView attrs使用ClendarView实现的不同风格日历欣赏总结

简要介绍

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(); } }); } }

实现效果

ClendarView attrs

CalendarView 的全部xml特性如下:

<declare-styleable name="CalendarView"> <attr name="calendar_padding" format="dimension" /><!--日历内部左右padding--> <attr name="month_view" format="color" /> <!--自定义类日历月视图路径--> <attr name="week_view" format="string" /> <!--自定义类周视图路径--> <attr name="week_bar_height" format="dimension" /> <!--星期栏的高度--> <attr name="week_bar_view" format="color" /> <!--自定义类周栏路径,通过自定义则 week_text_color week_background xml设置无效,当仍可java api设置--> <attr name="week_line_margin" format="dimension" /><!--线条margin--> <attr name="week_line_background" format="color" /><!--线条颜色--> <attr name="week_background" format="color" /> <!--星期栏的背景--> <attr name="week_text_color" format="color" /> <!--星期栏文本颜色--> <attr name="week_text_size" format="dimension" /><!--星期栏文本大小--> <attr name="current_day_text_color" format="color" /> <!--今天的文本颜色--> <attr name="current_day_lunar_text_color" format="color" /><!--今天的农历文本颜色--> <attr name="calendar_height" format="string" /> <!--日历每项的高度,56dp--> <attr name="day_text_size" format="string" /> <!--天数文本大小--> <attr name="lunar_text_size" format="string" /> <!--农历文本大小--> <attr name="scheme_text" format="string" /> <!--标记文本--> <attr name="scheme_text_color" format="color" /> <!--标记文本颜色--> <attr name="scheme_month_text_color" format="color" /> <!--标记天数文本颜色--> <attr name="scheme_lunar_text_color" format="color" /> <!--标记农历文本颜色--> <attr name="scheme_theme_color" format="color" /> <!--标记的颜色--> <attr name="selected_theme_color" format="color" /> <!--选中颜色--> <attr name="selected_text_color" format="color" /> <!--选中文本颜色--> <attr name="selected_lunar_text_color" format="color" /> <!--选中农历文本颜色--> <attr name="current_month_text_color" format="color" /> <!--当前月份的字体颜色--> <attr name="other_month_text_color" format="color" /> <!--其它月份的字体颜色--> <attr name="current_month_lunar_text_color" format="color" /> <!--当前月份农历节假日颜色--> <attr name="other_month_lunar_text_color" format="color" /> <!--其它月份农历节假日颜色--> <!-- 年视图相关 --> <attr name="year_view_month_text_size" format="dimension" /> <!-- 年视图月份字体大小 --> <attr name="year_view_day_text_size" format="dimension" /> <!-- 年视图月份日期字体大小 --> <attr name="year_view_month_text_color" format="color" /> <!-- 年视图月份字体颜色 --> <attr name="year_view_day_text_color" format="color" /> <!-- 年视图日期字体颜色 --> <attr name="year_view_scheme_color" format="color" /> <!-- 年视图标记颜色 --> <attr name="min_year" format="integer" /> <!--最小年份1900--> <attr name="max_year" format="integer" /> <!--最大年份2099--> <attr name="min_year_month" format="integer" /> <!--最小年份对应月份--> <attr name="max_year_month" format="integer" /> <!--最大年份对应月份--> <!--月视图是否可滚动--> <attr name="month_view_scrollable" format="boolean" /> <!--周视图是否可滚动--> <attr name="week_view_scrollable" format="boolean" /> <!--年视图是否可滚动--> <attr name="year_view_scrollable" format="boolean" /> <!--配置你喜欢的月视图显示模式模式--> <attr name="month_view_show_mode"> <enum name="mode_all" value="0" /> <!--全部显示--> <enum name="mode_only_current" value="1" /> <!--仅显示当前月份--> <enum name="mode_fix" value="2" /> <!--自适应显示,不会多出一行,但是会自动填充--> </attr> <!-- 自定义周起始 --> <attr name="week_start_with"> <enum name="sun" value="1" /> <enum name="mon" value="2" /> <enum name="sat" value="7" /> </attr> <!-- 自定义选择模式 --> <attr name="select_mode"> <enum name="default_mode" value="0" /> <enum name="single_mode" value="1" /> <enum name="range_mode" value="2" /> </attr> <!-- 当 select_mode=range_mode --> <attr name="min_select_range" format="integer" /> <attr name="max_select_range" format="integer" /> </declare-styleable>

使用ClendarView实现的不同风格日历欣赏

ClendarView使用的插拔式设计既可以在编译时指定年月日视图,如:app:month_view=“xxx.xxx.MonthView.class”,也可在运行时动态更换年月日视图,如:CalendarView.setMonthViewClass(MonthView.Class),从而达到UI即插即用的效果,相当于框架不提供UI实现,让UI都由客户端实现,不至于日历UI都千篇一律,只需遵守插拔式接口即可随意定制,自由化程度非常高,因此可以按照自己的想法定制各种风格的日历。 例如:

图片来源.

图片来源.

总结

ClendarView是安卓一个高自由度且强大的日历控件,能够自由的帮助我们实现各种我想想要的精美日历样式,这里只是简单介绍了一些ClendarView最基本的用法,希望对你们有所帮助。

参考文献:疯狂Android讲义 参考资料:https://gitee.com/huanghaibin_dev/CalendarView 作者:阮龙康 原文链接.


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #calendarview