La forma de modificar el control del calendario datepicker

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

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

Supongo que te gusta

Origin blog.csdn.net/xiyunmengyuan/article/details/75309689
Recomendado
Clasificación