Para satisfacer sus propias necesidades de IU, se han realizado algunas modificaciones en el código fuente de datepicker. La siguiente figura es el efecto de IU
1, la introducción de datepicker
Ruta de origen: https://github.com/dalong982242260/AndroidCalendar
2. La primera es la realización del contenido del título.
// El diseño raíz de la barra de título se usa para agregar espacio en la barra de título RelativeLayout rlTitle = new RelativeLayout (context) ;
LinearLayout llDateShow = new LinearLayout (contexto) ; llDateShow.setOrientation ( HORIZONTAL ) ;
Definir una distribución lineal para mostrar parte del año y mes
// Parámetros de diseño de los subelementos de la barra de título 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 (contexto) ; tvYear .setText ( "2017 年" ) ; tvYear .setTextSize (TypedValue. COMPLEX_UNIT_DIP , 16 ) ; tvYear .setTextColor ( mTManager .colorTitle ()) ;
// 月份 显示 tvMonth = new TextView (contexto) ; 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 ( nulo, nulo, rightDrawable2 , nulo ) ;
// Visualización del botón Atrás tvBack = new TextView (contexto) ;
tvBack .setText ( "Retorno" ) ;
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); } });