美文网首页android自定义控件android开源APPMaterial Design
安卓分享—一款优雅的日历控件-Material Calendar

安卓分享—一款优雅的日历控件-Material Calendar

作者: 暗尘随码去 | 来源:发表于2017-06-12 17:47 被阅读403次

因为项目中需要日历控件,作为一个懒惰的代码搬运工第一反应当然是去GitHub找,不过找到好看又好用的当然还是要拿出来和大家分享的,希望不要得到鄙视的目光。老规矩先上效果图。

calendarView.gif

作为一个简单的代码搬运工我的反应是这样的


666.gif

是这样的:

6+++.gif
  • 好了言归正传,代码地址Material-CalendarView

  • 需要直接下载demo并运行的同学请注意因为demo中gradle插件版本过低因此需要将build.gradle中的(替换成高版本即可)

        classpath 'com.android.tools.build:gradle:2.4.0-alpha7'

替换成

        classpath 'com.android.tools.build:gradle:2.2.2'

使用

  • 1.添加依赖
compile 'com.prolificinteractive:material-calendarview:1.4.3'
  • 2.布局中引用
<com.prolificinteractive.materialcalendarview.MaterialCalendarView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/calendarView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:mcv_showOtherDates="all"
    app:mcv_selectionColor="#00F"
    />
  • 3.实现监听日期改变的接口和方法已得到我们选择的日期
@Override
    public void onDateSelected(@NonNull MaterialCalendarView widget, @Nullable CalendarDay date, boolean selected) {
        textView.setText(getSelectedDatesString());
    }

    @Override
    public void onMonthChanged(MaterialCalendarView widget, CalendarDay date) {
        //noinspection ConstantConditions
        getSupportActionBar().setTitle(FORMATTER.format(date.getDate()));
    }

    private String getSelectedDatesString() {
        CalendarDay date = widget.getSelectedDate();
        if (date == null) {
            return "No Selection";
        }
        return FORMATTER.format(date.getDate());
    }

个性化功能定制-结合demo说明

  • 1.常用方法说明
mcv.state().edit()
  .setFirstDayOfWeek(Calendar.WEDNESDAY)
  .setMinimumDate(CalendarDay.from(2016, 4, 3))
  .setMaximumDate(CalendarDay.from(2016, 5, 12))
  .setCalendarDisplayMode(CalendarMode.WEEKS)
  .commit();
  • .setFirstDayOfWeek(Calendar.WEDNESDAY) 设置每周的第一天为周几,也就是国外常以周日为每周的第一天,国内则是周一,在布局中的表现就是图中标注的地方为周几
FirstDayOfWeek.png
  • setMinimumDate(CalendarDay.from(2016, 4, 3)) 日历的开始时间

  • .setMaximumDate(CalendarDay.from(2016, 5, 12)) 同理日历的结束时间

  • .setCalendarDisplayMode(CalendarMode.WEEKS) 日历的样式可选的有以周的形式和月的形式两种。

2.demo中功能

demo.png
  • Basic Example :最基本的使用选定时期可以用在票务应用之类

  • Calendar With Decorated : 选中日期带有装饰图标的美化

  • Calendar With Dynamic Modes : 设置日历显示样式(周,月)

  • **Disabled Days Example ** :可以设置在每个月中有哪些天是不可选定的

  • XML Customization : 属性完全在xml布局中设置

  • Calendar in Dialogs : 在对话框中显示

Disabled_红色日期为不可选.png

暗尘随码去 明月逐人来

star.gif

相关文章

网友评论

  • CHN_Liao:如果一打开日历,就显示当天所在的日期,该怎么设置?
    CHN_Liao:@暗尘随码去 可以了,谢谢楼主
    暗尘随码去:显示当天调用下这个方法: calendarView.addDecorator(new TodayDecorator());
    然后新建TodayDecorator 类并实现DayViewDecorator接口
    private class TodayDecorator implements DayViewDecorator {

    private final CalendarDay today;
    private final Drawable backgroundDrawable;

    public TodayDecorator() {
    today = CalendarDay.today();
    backgroundDrawable = getResources().getDrawable(R.drawable.today_circle_background);
    }

    @Override
    public boolean shouldDecorate(CalendarDay day) {
    return today.equals(day);
    }

    @Override
    public void decorate(DayViewFacade view) {
    view.setBackgroundDrawable(backgroundDrawable);
    }
    }
  • 304a6d28cd30:你好,这个周一周二周三...这个中文怎么设置
    暗尘随码去:@迪巴哥儿 没有设置就是中文的
    304a6d28cd30:@暗尘随码去 我的意思,这个库,默认的星期栏 是Mon Tue Wed。。。你是怎么设置成一 二 三。。。的?
    暗尘随码去:中文怎么设置是什么意思?你是要设置成英文吗?

本文标题:安卓分享—一款优雅的日历控件-Material Calendar

本文链接:https://www.haomeiwen.com/subject/ttwlqxtx.html