Android进阶之路 - timeSelector(日期选择器)简单、方便、快速的实现方式

首先声明,我大多时候比较懒,喜欢用现成的,就是只需要简单的修改一下就可以直接使用的那种

2022 Hint:技术迭代非常快,如果要选择合适的工具,还是要自己去github找一下的!

在此之前,我找过几款日期选择器的控件,也断断续续用了一天左右的时间,但是中途都不尽人意,还好修修补补实现了我的功能需求,那么下面直接看图,看代码吧。

转载请注明timeSelector(日期选择器)简单、方便、快速的实现方式

框架名称,几近相同,但不是同一个开发者,且记,因该篇写的较早,所以兼容性、扩展性很有限,而且仅仅只是一个时间选择控制器而已

TimeSelector 框架

首先我的需求是实现一个年月日的选择器,不需要实现-小时分钟

Effect - 年月日时分

这里写图片描述

Effect - 年月日

这里写图片描述

被我抛弃,原因有俩点:

  1. 确定与取消的左右位置,不太习惯,不符合大多数人的惯性思维
  2. 确定与取消的按钮没有居中,样式不被产品看好(自己都不看好)

优点:

  1. 可快速实现需求,在setIsShowtype中有多种样式,总有一款可以满足我们
  2. 窗外关闭,也就是点击外面直接关闭控件

请求:如果后续有前辈找出缺点的补救方法,麻烦您评论留言

Hint:此控件作者的git地址:https://github.com/yellowhai/TimeSelector

先行配置

build - 基于app

 compile 'com.github.yellowhai:TimeSelector:1.4'

build - 基于project

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
        jcenter()
    }
}
具体实现

MainActivity :

package com.example.dow.timeselector;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.hh.timeselector.timeutil.datedialog.DateListener;
import com.hh.timeselector.timeutil.datedialog.TimeConfig;
import com.hh.timeselector.timeutil.datedialog.TimeSelectorDialog;

public class MainActivity extends AppCompatActivity {

    private TextView mContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView mBtn = (TextView) findViewById(R.id.btn);
        mContent = (TextView) findViewById(R.id.content);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TimeSelectorDialog dialog = new TimeSelectorDialog(MainActivity.this);
                //设置标题
                dialog.setTimeTitle("选择时间:");
                //显示类型
                dialog.setIsShowtype(TimeConfig.YEAR_MONTH_DAY_HOUR_MINUTE);
                //默认时间
                dialog.setCurrentDate("2017-01-11 14:50");
                //隐藏清除按钮
                dialog.setEmptyIsShow(false);
                //设置起始时间
                dialog.setStartYear(1888);
                dialog.setDateListener(new DateListener() {
                    @Override
                    public void onReturnDate(String time,int year, int month, int day, int hour, int minute, int isShowType) {
                        Toast.makeText(MainActivity.this,time,Toast.LENGTH_LONG).show();
                        mContent.setText(time);
                    }
                    @Override
                    public void onReturnDate(String empty) {
                        Toast.makeText(MainActivity.this,empty,Toast.LENGTH_LONG).show();
                    }
                });
                dialog.show();
            }
        });
    }
}

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.example.dow.timeselector.MainActivity">

    <TextView
        android:id="@+id/btn"
        android:padding="5dp"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="时间选择器" />
    <TextView
        android:id="@+id/content"
        android:padding="5dp"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />
</LinearLayout>

timeselector 框架

Effect - 年月日:

这里写图片描述

先行配置

build

 compile 'com.feezu.liuli:timeselector:1.1.3+'

所遇问题

问题1:调用不了setMode这个方法,也就是实用不了年月日的效果
答疑:因为我一开始引用的是0.0.8+的依赖包,而setMode这个api是出现在1.1.0之后的,所以更换依赖之后,此问题解决

问题2:获取数据之后,默认返回还包含00.00的时分单位
答疑:使用substring直接截取字符串长度,获取我们所需(这个要是集成到他的项目中可能更好)

优点:可快速实现需求,在setIsShowtype中有多种样式,代码较少,使用方便

Hint:此控件作者的git地址:https://github.com/mrfluency/Time-Selector

具体使用

MainActivity

package com.example.dow.timerdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import org.feezu.liuli.timeselector.TimeSelector;


public class MainActivity extends AppCompatActivity {

    private TextView mContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView mBtn = (TextView) findViewById(R.id.btn);
        mContent = (TextView) findViewById(R.id.content);

        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TimeSelector timeSelector = new TimeSelector(MainActivity.this, new TimeSelector.ResultHandler() {
                    @Override
                    public void handle(String time) {
                        //截取字符串长度,只需要年月日
                        String substring = time.substring(0,10);
                        mContent.setText(substring);
                    }
                }, "1988-01-01 00:00", "2018-12-1 17:34");
                //样式-当前为年月日
                timeSelector.setMode(TimeSelector.MODE.YMD);
                //小时分钟不现实
                timeSelector.disScrollUnit(TimeSelector.SCROLLTYPE.HOUR, TimeSelector.SCROLLTYPE.MINUTE);
                //dialog的弹出
                meSelector.show();

            }
    });
  }
}

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.dow.timerdemo.MainActivity">

    <TextView
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="时间选择器" />
        
    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
       />
  
</LinearLayout>

DateUtils(记得添加依赖,还有自己导包):

package com.example.dow.timerdemo;
import android.content.Context;
import android.widget.TextView;

//import org.feezu.liuli.timeselector.TimeSelector;

/**
 * Created by YongLiu on 2017/5/18.
 */

public class DateUtils {

    /**
     * 年月日
     * @param mContext 上下文
     * @param textView 显示日期的View
     * */
    public static void showDayDate(Context mContext,final TextView  textView){
        TimeSelector timeSelector = new TimeSelector(mContext, new TimeSelector.ResultHandler() {
            @Override
            public void handle(String time) {
                //截取字符串长度,只需要年月日
                String substring = time.substring(0,10);
                 textView.setText(substring);
            }
        }, "1988-01-01 00:00", "2018-12-1 17:34");
        //样式-当前为年月日
        timeSelector.setMode(TimeSelector.MODE.YMD);
        //小时分钟不现实
        timeSelector.disScrollUnit(TimeSelector.SCROLLTYPE.HOUR, TimeSelector.SCROLLTYPE.MINUTE);
        //dialog的弹出
        timeSelector.show();
    }
    /**
     * 年月日时分
     * @param mContext 上下文
     * @param textView 显示日期的View
     * */
    public static void showMinuteDate(Context mContext,final TextView  textView){
        TimeSelector timeSelector = new TimeSelector(mContext, new TimeSelector.ResultHandler() {
            @Override
            public void handle(String time) {
                textView.setText(time);
            }
        }, "1988-01-01 00:00", "2018-12-1 17:34");
        //样式-当前为年月日
        timeSelector.setMode(TimeSelector.MODE.YMD);
        //小时分钟不现实
        timeSelector.disScrollUnit(TimeSelector.SCROLLTYPE.HOUR, TimeSelector.SCROLLTYPE.MINUTE);
        //dialog的弹出
        timeSelector.show();
    }
}

在需要调用日期的地方,直接使用以下这一行代码即可:

 DateUtils.showDayDate(MainActivity.this,mContent);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

远方那座山

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

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

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

打赏作者

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

抵扣说明:

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

余额充值