android开发游记:timesquere时间瀑布

本文介绍一款高级时间瀑布控件,提供美观的日期选择体验及自定义展示功能。包括使用方法、源码下载、转换指南、初始化配置、日期筛选、点击事件监听和自定义展示实现。

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

android系统自带的日期控件真的是丑到爆,在日期的选择上都比较流行使用瀑布的方式,这里分享一个非常精致的开源时间瀑布。

先看效果图:

这里写图片描述 这里写图片描述

下载地址:
timesquere时间瀑布下载地址

下面介绍下使用方法:

首先下载类库,导入工程并关联到自己的工程上
注意项目是android studio的项目,如果要在eclipse中使用需要转换成eclipse工程,转换方法:
如何将android studio工程 转换为 eclipse工程

不想自己转的,我这里上传了一个已经转换成eclipse项目的类库,并根据自己项目的需求修改了显示的风格,就是如上第一张图:
timesquere时间瀑布(eclipse)下载地址

使用方法很简单,还能支持简单的自定义。
首先,在布局中添加控件的布局:

<com.squareup.timessquare.CalendarPickerView
      android:id="@+id/calendar_view"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="#00000000"
      android:clipToPadding="false"
      android:paddingBottom="16dp" />

然后在自己的activity中初始化:

calendar = (CalendarPickerView) findViewById(R.id.calendar_view);
calendar.init(new Date(), TimeUtil.add(new Date(), Calendar.MONTH, 2))
        .inMode(SelectionMode.SINGLE)
        .withSelectedDate(new Date());

解释下方法和参数:
init()方法:2个参数分别是开始日期和结束日期;
inMode()方法:设置显示模式,这里是SINGLE模式,表示单选模式;
withSelectedDate():设置默认选中的日期;

上段代码直接放上去会保存,因为你没有TimeUtil,上面的add方法是获取当前日期后2个月的日期,下面上TimeUtil的add方法:

    /**
     * 日期加减
     * @return
     */
    public static Date add(Date date,int field,int value) {
        gc.setTime(date);
        gc.add(field, value);
        return gc.getTime();
    }

如果你希望并不是每天都可以选择,那么你可以设置一个日期过滤器,来过滤哪些日期可以选择,哪些不能:

    calendar.setDateSelectableFilter(new DateSelectableFilter() {
        @Override
        public boolean isDateSelectable(Date date) {
            //加入自己的逻辑
            return true;
        }
    });

返回true表示可以选择,false则无法选择,在isDateSelectable的回调中加入自己的过滤逻辑,默认全反true。

设置点击事件监听,设置一个日期选择监听器:

    calendar.setOnDateSelectedListener(new OnDateSelectedListener() {
        @Override
        public void onDateSelected(Date date) {
            Toast.makeText(context, "您选择了:"+date, Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onDateUnselected(Date date) {
        }
    });

这样你就可以尝试着运行一下了。

如果你有特别的需求,比如你希望显示日期的格子里显示一些其他的数据,比如你发布一个旅游产品,选择日期的时候要在每天的格子控件中显示当天的价格。像这样:

这里写图片描述

timesquere引入了一种叫做“装饰器”的东西,其实就是一个接口:

public interface CalendarCellDecorator {
    void decorate(CalendarCellView cellView, Date date);
}

你需要实现这个接口来实现自定义的展示效果
其中的第一个参数CalendarCellView 其实就是一个增强的TextView,你可以把它看做TextView,第二个参数是选择的日期,你可以通过SpannableString来设置文字的样式,然后把它设置到这个TextView里就可以了,下面是我的实现:

@Override
    public void decorate(CalendarCellView cellView, Date date) {
        String dateStr = Integer.toString(date.getDate());
        SpannableString strSpan;
        long time = today.getTime()-date.getTime();
        if(cellView.isToday()){
            dateStr = "今天";
        }
        strSpan = new SpannableString(dateStr + "\n¥200" );
        strSpan.setSpan(new StyleSpan(Typeface.BOLD),
                        0,dateStr.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        strSpan.setSpan(new RelativeSizeSpan(0.8f),
                        dateStr.length(),strSpan.length(),
                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        strSpan.setSpan(new ForegroundColorSpan(0xfff87b5c),
                        dateStr.length(),strSpan.length(),
                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        cellView.setText(strSpan);
    }

在每天的日期下面加一个橙色的“¥200”,并把今天的日期替换为“今天”字样。这里你要加入自己的处理逻辑,哪些日期需要不同的样式,哪些日期有特殊的效果等,我只是作一个例子介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值