必威体育Betway必威体育官网
当前位置:首页 > IT技术

安卓日历插件 calendarview使用

时间:2019-08-09 05:14:19来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

安卓日历

插件效果如图所示:
使用:
引入:在build.gradle中添加  implementation 'com.prolificinteractive:material-calendarview:1.4.0';
应用:
(1)所在的activity要
implements CalFragment.OnFrgDataListener
(2)
CalFragment calendarViewFragment= new CalFragment();
calendarViewFragment.show(getSupportFragmentManager(), "timeChoose");

(3)重写CalFragment
public class CalFragment extends DialogFragment implements OnDateSelectedListener {
    DialogFragment mcontext = this;
    int flag = 0;

    private View view;
    MaterialCalendarView mcv;
    //接收从Activity传来的数据
    Bundle timeBundle;

    OnFrgDataListener IListener;


    public CalFragment() {
        // required empty public constructor
    }

    @SuppressLint("validFragment")
    public CalFragment(int flag) {
        this.flag = flag;
    }

    @Override
    public View onCreateView(layoutInflater inflater, ViewGroup container,
                             Bundle savedinstanceState) {

        view = inflater.inflate(R.layout.fragment_cal, container, false);
        mcv = view.findViewById(R.id.mcv);
        timeBundle = getarguments();
        initData();
        return view;
    }

    @Override
    public void onStart() {
        super.onStart();

        //下面这些都是为了让dialog宽度全充满
        Window win = getDialog().getWindow();
        // 一定要设置Background,如果不设置,window属性设置无效
        win.setBackgrounddrawable(new colorDrawable(getresources().getColor(R.color.white)));

        displayMetrics dm = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
        WindowManager.layoutparams params = win.getAttributes();
        // 使用ViewGroup.LayoutParams,以便Dialog 宽度充满整个屏幕

        params.width = ViewGroup.LayoutParams.MATCH_parent;
        params.height = ViewGroup.LayoutParams.wrap_content;
        win.setAttributes(params);

        /*if (dialog != null) {
            DisplayMetrics dm = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
            dialog.getWindow().setLayout((int) (dm.widthPixels * 1), ViewGroup.LayoutParams.WRAP_CONTENT);
        }*/
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这个主题 背景全透明 没有半透明
        // setStyle(DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Holo_Light);
    }

    public void initData() {
        // 显示兴起补全的整个礼拜的上个月或者下个月的日期 一般会多出一行整个礼拜
        // 点击补全出来的另外一个月的信息 可以直接跳到那个月
        mcv.setShowOtherDates(MaterialCalendarView.SHOW_ALL);

        // 设置日历默认的时间为当前的时间
        mcv.setSelectedDate(new Date());
        if(flag == 1 ){
            Calendar c = Calendar.getInstance();
        /*取得系统日期:*/
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);

            // 日历的主要设置
            mcv.state().edit()
                    // 设置你的日历 第一天是周一还是周一
                    .setFirstDayOfWeek(Calendar.MONDAY)
                    // 设置你的日历的最小的月份  月份为你设置的最小月份的下个月 比如 你设置最小为1月 其实你只能滑到2月
                /*.setMinimumDate(CalendarDay.from(2015, 1, 1))*/
                    // 同最小 设置最大
                    .setMaximumDate(CalendarDay.from(year, month, day))
                    // 设置你的日历的模式  是按月 还是按周
                    .setCalendarDisplayMode(CalendarMode.MONTHS)
                    .commit();
        } else {
            // 日历的主要设置
            mcv.state().edit()
                    // 设置你的日历 第一天是周一还是周一
                    .setFirstDayOfWeek(Calendar.MONDAY)
                    // 设置你的日历的最小的月份  月份为你设置的最小月份的下个月 比如 你设置最小为1月 其实你只能滑到2月
                /*.setMinimumDate(CalendarDay.from(2015, 1, 1))*/
                    // 设置你的日历的模式  是按月 还是按周
                    .setCalendarDisplayMode(CalendarMode.MONTHS)
                    .commit();
        }
// 设置你选中日期的背景底色
        mcv.setSelectionColor(getResources().getColor(R.color.blueBackOfBtn));
        mcv.setOnDateChangedListener(this);

    }

    /**
     * 日期选择 回调函数
     *
     * @param widget
     * @param date
     * @param selected
     */
    @Override
    public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) {
        toast.maketext(getActivity(), getSelectedDatesString(), Toast.LENGTH_SHORT).show();
        //       Toast.makeText(getActivity(),"从Activity传递的数据:"+(String)timeBundle.get("date"),Toast.LENGTH_SHORT).show();
        IListener.progress(mcv.getSelectedDate().getDate());

        //选择后,延迟消失
        new handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mContext.dismiss();
            }
        }, 1000);


    }

    /**
     * 将日期转换为字符串
     *
     * @return
     */
    private String getSelectedDatesString() {
        CalendarDay date = mcv.getSelectedDate();
        if (date == null) {
            return "No Selection";
        }
        Log.i("sinstar", "getSelectedDatesString: " + date.toString());
        return formatter.format(date.getDate());
    }

    private static final DateFormat FORMATTER = simpledateformat.getDateInstance();


    /**
     * 定义接口,向Activity传递数据
     */
    public interface OnFrgDataListener {
        public void progress(Date date);
    }

    /**
     * 注入实例方法
     *
     * @param
     */
   /* public void setOnFrgDataListener(OnFrgDataListener listener){
        IListener=listener;
    }*/
    @Override
    public void onattach(Activity activity) {
        super.onAttach(activity);

        if (activity instanceof OnFrgDataListener) {
            IListener = (OnFrgDataListener) activity;
        } else {
            throw new illegalargumentException("activity must implements OnFrgDataListener");
        }

    }

    @Override
    public void onDetach() {
        super.onDetach();

        IListener = null;
    }
}
(4)设置日历的最大时间
// 同最小 设置最大
                    .setMaximumDate(CalendarDay.from(year, month, day))
(5)date即为所选时间
 @Override
    public void progress(Date date) {
        //每次选择日期后,都会调用这个方法
        if (date != null) {
            str = ParseDate.dateParseString(date);
        
                query_1.setText(str);
           
      
    }
}

相关阅读

2018火车票预售日历出来了!可以买票了吗?

2018年元旦节日过了,农历春节也离我们不远了,过年是我们每个中国人一年中最重要的一个节日,做为离家打拼的游子每年最关心也是回家过

日历设计简史

日历是一项深入我们生活的设计,最早的日历是什么样的?它的设计经历了哪些改变?本文将会带领大家一起探索日历的演化进程。我们被那些

2018淘宝造物节节目清单介绍,“奇市西湖”惊喜日历分享

造物节是阿里打造的一个大型IP,并且是一个空前盛大的线下活动。今年造物节将在杭州西湖展开,一共200家淘宝神店,还有6大集市。大家好

电子日历的设计和实现

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="

2019年春运火车票购票分析指南(附春运购票日历)

春运临近,火车票成为众网友回家的“思念票”。记者从中国铁路公司获悉,随着2019年春节的临近,2019春运火车票于12月23日提前发售。此

分享到:

栏目导航

推荐阅读

热门阅读