The way to modify datepicker calendar control

In order to meet your own UI needs, some modifications have been made to the source code of datepicker. The following figure is the UI effect


1, the introduction of datepicker 

Source path: https://github.com/dalong982242260/AndroidCalendar

2. The first is the realization of title content 


// The title bar root layout is used to add title bar space
 RelativeLayout rlTitle = new RelativeLayout (context) ;

LinearLayout llDateShow = new LinearLayout(context);
llDateShow.setOrientation(HORIZONTAL);
Define a Linearlayout to display part of the year and month
// Layout parameters of title bar sub-elements
 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);

// Back button display
 tvBack = new TextView (context) ;
tvBack .setText ( "Return" ) ;
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,日历部分背景色的设置

@Override
public int colorBG() {
    return 0x01acf1;
}

@Override
public int colorBGCircle() {
    return 0xFFFFFFFF;
}

@Override
public int colorTitleBG() {
    return 0xFFF37B7A;
}

@Override
public int colorTitle() {
    return 0xEEFFFFFF;
}

@Override
public int colorToday() {
    return 0x01acf1;
}

@Override
public int colorG() {
    return 0xFFFFFFFF;
}//中间字体颜色

@Override
public int colorF() {
    return 0xEEC08AA4;
}

@Override
public int colorWeekend() {
    return 0xFFFFFFFF;
}//周末字体颜色设置

@Override
public 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);
// 动态更新的时候必须 清除cache
dpcManager.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);
    }
});

发布了29 篇原创文章 · 获赞 40 · 访问量 3万+

Guess you like

Origin blog.csdn.net/xiyunmengyuan/article/details/75309689