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() {@Overridepublic 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); }});
阅读全文
3 0
- datepicker 日历控件修改之路
- 日历控件之DatePicker
- Swing Datepicker(日历控件)
- Android 控件之DatePicker(日期和日历)
- 日历控件my97 datepicker-1
- js之widget日历datepicker
- My97 Datepicker 日历控件 $dp拒绝访问
- JQuery 日历控件Datepicker的简单使用
- jquery 日历控件 datepicker的使用
- 开源日历控件DatePicker源码解析
- bootstrap-datepicker日历控件的使用心得
- android 自带日历控件datePicker
- 日历控件最新修改
- 控件之DatePicker、TimePicker学习
- Android控件开发之DatePicker
- Android控件之DatePicker、TimePicker
- android控件之 DatePicker、TimePicker
- Android控件开发之DatePicker
- T-SQL查询:慎用 IN 和 NOT IN
- drupal8里用colorbox建立一个相册
- 禅道安装及配置
- GAN原理理解
- PHP ajax json
- datepicker 日历控件修改之路
- ibatis动态参数和集合参数配置
- tcpdump nc tcpdump使用简介使用简介
- 20170711
- VS2013封装DLL动态库并调用
- Maven的配置和使用
- 客服测试
- Spring整合Mybatis
- 汉诺塔