datepicker 日历控件修改之路

来源:互联网 发布:弹弓专卖店淘宝网店铺 编辑:程序博客网 时间:2024/06/05 08:36

为了满足自己的UI需求对datepicker 的源码进行了一些修改,下图是UI效果


1,datepicker 的引入 

源码路径:https://github.com/dalong982242260/AndroidCalendar

2,首先是title内容的实现 


// 标题栏根布局 用于添加标题栏空间RelativeLayout rlTitle = new RelativeLayout(context);

LinearLayout llDateShow = new LinearLayout(context);llDateShow.setOrientation(HORIZONTAL);
定义一个Linearlayout 用来显示 年份和月份部分内容
// 标题栏子元素布局参数RelativeLayout.LayoutParams lpYear =        new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);lpYear.addRule(RelativeLayout.CENTER_VERTICAL);
RelativeLayout.LayoutParams lpMonth =        new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);lpMonth.addRule(RelativeLayout.CENTER_IN_PARENT);
RelativeLayout.LayoutParams lpBack =        new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);lpEnsure.addRule(RelativeLayout.CENTER_VERTICAL);lpEnsure.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

// 年份显示tvYear = new TextView(context);tvYear.setText("2017年");tvYear.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);tvYear.setTextColor(mTManager.colorTitle());

// 月份显示tvMonth = new TextView(context);tvMonth.setText("7月");tvMonth.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);tvMonth.setTextColor(mTManager.colorTitle());Drawable rightDrawable2 = context.getResources().getDrawable(R.mipmap.arrow_top);rightDrawable2.setBounds(0, 0, rightDrawable2.getMinimumWidth(), rightDrawable2.getMinimumHeight());tvMonth.setCompoundDrawables(null, null, rightDrawable2, null);

// 返回按钮显示tvBack = new TextView(context);
tvBack.setText("返回");
tvBack.setGravity(Gravity.CENTER_VERTICAL);tvYear2.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
tvBack.setTextColor(mTManager.colorTitle());
Drawable rightDrawable = context.getResources().getDrawable(R.mipmap.fanhui);
rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), rightDrawable.getMinimumHeight());
tvBack2.setCompoundDrawables(rightDrawable, null, null, null);
tvBack2.setOnClickListener(
new OnClickListener() {    
@Override    
public void onClick(View v) {        
onSureClickListener.onSureClick();//回调接口    
}});

添加view

llDateShow.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {        onSureClickListener.onTopClick();    }});

llDateShow.addView(tvYear,lpYear);llDateShow.addView(tvMonth,lpMonth);

rlTitle.addView(tvBack, lpBack);rlTitle.addView(llDateShow,lpMonth);

回调接口的定义

OnSureClickListener onSureClickListener;public interface OnSureClickListener{    void  onSureClick();    void  onTopClick();}

3,日历部分背景色的设置

@Overridepublic int colorBG() {    return 0x01acf1;}@Overridepublic int colorBGCircle() {    return 0xFFFFFFFF;}@Overridepublic int colorTitleBG() {    return 0xFFF37B7A;}@Overridepublic int colorTitle() {    return 0xEEFFFFFF;}@Overridepublic int colorToday() {    return 0x01acf1;}@Overridepublic int colorG() {    return 0xFFFFFFFF;}//中间字体颜色@Overridepublic int colorF() {    return 0xEEC08AA4;}@Overridepublic int colorWeekend() {    return 0xFFFFFFFF;}//周末字体颜色设置@Overridepublic int colorHoliday() {    return 0x80FED6D6;}
monthView.setBackground(context.getResources().getDrawable(R.mipmap.home_top_bg));

4,activity中的设置

final DatePicker picker = (DatePicker) findViewById(R.id.main_dp);picker.setDate(2017, 7);picker.setFestivalDisplay(false);picker.setTodayDisplay(false);picker.setHolidayDisplay(false);picker.setDeferredDisplay(false);picker.setHorizontalScrollBarEnabled(true);picker.setClickable(true);picker.setOnSureClickListener(new DatePicker.OnSureClickListener() {    @Override    public void onSureClick() {        finish();    }    @Override    public void onTopClick() {        new MyPickerDialog(BillTimeSearchActivity.this, AlertDialog.THEME_HOLO_LIGHT, new DatePickerDialog.OnDateSetListener() {            @Override            public void onDateSet(android.widget.DatePicker view, final int years, final int months, final int dayOfMonths) {                calendar.set(Calendar.YEAR, years);                calendar.set(Calendar.MONTH, months);                calendar.set(Calendar.DAY_OF_MONTH,dayOfMonths);                handler.post(new Runnable() {                    @Override                    public void run() {                        tmp.clear();                        tmp.add(years+"-"+months+"-"+dayOfMonths);                        dpcManager.clearnDATE_CACHE();                        dpcManager.setDecorBG(tmp);                        picker.setDate(years, months+1);                        picker.setDPDecor(new DPDecor() {                            @Override                            public void drawDecorBG(Canvas canvas, Rect rect,                                                    Paint paint) {                                paint.setColor(getResources().getColor(R.color.white));                                canvas.drawCircle(rect.centerX(), rect.centerY(), rect.width() / 3F, paint);                            }                        });                        picker.invalidate();                    }                });            }        },calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE)).show();    }});
单选事件
picker.setOnDatePickedListener(new DatePicker.OnDatePickedListener() {    @Override    public void onDatePicked(String date) {        ToastUtil.showMessage(BillTimeSearchActivity.this,date);        tmp.clear();        tmp.add(date);        dpcManager.clearnDATE_CACHE();        dpcManager.setDecorBG(tmp);        //picker.setDate(Integer.valueOf(date.split("-")[0]), Integer.valueOf(date.split("-")[1]));        picker.setDPDecor(new DPDecor() {            @Override            public void drawDecorBG(Canvas canvas, Rect rect,                                    Paint paint) {                paint.setColor(getResources().getColor(                        R.color.white));                canvas.drawCircle(rect.centerX(),                        rect.centerY(), rect.width() / 3F,                        paint);            }        });        picker.invalidate();    }});picker.setIsSelChangeColor(true,        getResources().getColor(R.color.title_blue)); // 设置选择的日期字体颜色,不然有的背景颜色和默认的字体颜色不搭dpcManager = DPCManager.getInstance();picker.setMode(DPMode.SINGLE);// 动态更新的时候必须 清除cachedpcManager.clearnDATE_CACHE(); // 清除cache// 重新设置日期 tmp.add(year+"-"+month+"-"+day);dpcManager.setDecorBG(tmp);picker.setDate(year, month);picker.setDPDecor(new DPDecor() {    @Override    public void drawDecorBG(Canvas canvas, Rect rect,                            Paint paint) {        paint.setColor(getResources().getColor(                R.color.white));        canvas.drawCircle(rect.centerX(),                rect.centerY(), rect.width() / 3F,                paint);    }});

原创粉丝点击