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); } });