Android自定义日历
来源:互联网 发布:淘宝网雪纺女装 编辑:程序博客网 时间:2024/05/21 22:47
1.自定义控件基于系统控件上改进
2.类继承布局或者基础控件进行自定义
3.去到Main的布局中去绑定视图,
4.对象的克隆的内存与源对象的内存是相同的
5.LayoutInflater inflater=LayoutInflater.from(context);
inflater.inflate(R.layout.calerdar_view,this);
绑定自定义布局
public class NewCalerdar extends LinearLayout { private TextView top_tv; private ImageView top_pre; private ImageView top_next; private GridView week_grid; private Calendar data= Calendar.getInstance(); public NewCalerdar(Context context) { super(context); //initControl(context); } /** * 后两个方法调用initControl,绑定布局 * @param context * @param attrs */ public NewCalerdar(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initControl(context); } public NewCalerdar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initControl(context); } private void initControl(Context context) { blindControl(context);//绑定视图及UI控件 blindControlEvent();//点击事件 renderCanlendar();//渲染日历 } private void blindControlEvent() { top_pre.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { data.add(Calendar.MONTH,-1); renderCanlendar(); } }); top_next.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { data.add(Calendar.MONTH,1); renderCanlendar(); } }); } private void blindControl(Context context) { /** * 绑定布局 */ LayoutInflater inflater=LayoutInflater.from(context); inflater.inflate(R.layout.calerdar_view,this); top_tv=findViewById(R.id.top_data); top_pre=findViewById(R.id.top_pre); top_next=findViewById(R.id.top_next); week_grid=findViewById(R.id.canlendar_grid); } private void renderCanlendar() { /** * SimpleDateFormat("MMM FF"); * 格式化日期,输出的数据是(2016 05) */ SimpleDateFormat sdf=new SimpleDateFormat("MMM FF"); /** * Format是CString类的一个成员函数,它通过格式操作使任意类型的数据转换成一个字符串。 * Format参数也是一个格式化字符串。DateTime是时间类型。返回值是一种格式化后的字符串。 */ top_tv.setText(sdf.format(data.getTime())); ArrayList<Date> cells=new ArrayList<>(); /** * 时间类克隆 * clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同, * 然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。 */ Calendar calendar= (Calendar) data.clone(); calendar.set(Calendar.DAY_OF_MONTH,1); int preDays=calendar.get(Calendar.DAY_OF_WEEK)-1; calendar.add(Calendar.DAY_OF_MONTH,-preDays); int maxCellCount=6*7; while(cells.size()<maxCellCount){ cells.add(calendar.getTime()); calendar.add(calendar.DAY_OF_MONTH,1); } /** * 给GridView绑定适配器,并给适配器传入数据源 */ week_grid.setAdapter(new CalendarAdapter(getContext(),cells)); } private class CalendarAdapter extends ArrayAdapter<Date>{ LayoutInflater inflater; public CalendarAdapter(@NonNull Context context, ArrayList<Date> days) { super(context, R.layout.calendar_text_day,days); inflater=LayoutInflater.from(context); //Toast.makeText(getContext(), "666", Toast.LENGTH_SHORT).show(); } /** * 传替视图的类 * @param position * @param convertView * @param parent * @return */ public View getView(int position,View convertView,ViewGroup parent) { Date date=getItem(position); /** * 判断convertView 是否为空,空则绑定视图 */ if (convertView==null){ convertView=inflater.inflate(R.layout.calendar_text_day,parent,false); } int day=date.getDate(); ((TextView)convertView).setText(String.valueOf(day)); /*Calendar calendar= (Calendar) data.clone(); calendar.set(Calendar.DAY_OF_MONTH,1); int daysInMonth=calendar.getActualMaximum(calendar.DATE);*/ Date now=new Date(); boolean isTheSameMonth=false; if(date.getMonth()==now.getMonth()){ isTheSameMonth=true; } if(isTheSameMonth){ /** * 给月份的所有数据改变颜色 */ ((TextView) convertView).setTextColor(Color.parseColor("#000000")); }else{ ((TextView) convertView).setTextColor(Color.parseColor("#666666")); } if (now.getDate()==date.getDate()&&now.getMonth()==date.getMonth()&& now.getYear()==date.getYear()){ ((TextView) convertView).setTextColor(Color.parseColor("#ff0000")); ((Calendar_day_textview) convertView).isToday=true; } return convertView; } }}
阅读全文
0 0
- android 自定义日历控件
- Android自定义日历控件
- Android 自定义日历控件
- android自定义日历
- android自定义日历控件
- Android自定义日历
- Android自定义实现日历
- Android 自定义日历控件
- Android 自定义日历控件
- Android-自定义日历控件
- Android自定义日历控件
- Android"自定义"日历
- Android 自定义日历控件
- Android 自定义View 日历
- android 自定义日历
- Android自定义日历控件
- Android自定义日历
- android自定义控件---android日历
- 3、jQuery的属性与样式--样式篇
- 初始网络爬虫之三:网络爬虫最常用的requests库
- php微信开发解决{"errcode":40016,"errmsg":"invalid button size hint: [pqd5ea0809vr22]"}
- Strust2人事管理系统
- PyQt5学习笔记02----初探Qt Designer 设计师
- Android自定义日历
- 千年古银杏树成‘网红’
- 20171013Data
- Oracle 11g数据库详细安装步骤图解
- Redis在京东到家的订单中的使用
- CTF之隐写术总结
- inline(内联)函数
- FastDFS之Tracker和Storage安装-yellowcong
- iOS开发 如何在Label中显示图片-图文混排