
产品要做签到功能,签到功能要基于一个日历来进行,所以就根据 要求自定义了一个日历
自定义控件相信做androID都知道:
(1)首先创建一个类,继承一个容器类或者是一个控件
(2)然后就是你需要设置的属性等的,在attrs文件夹中
(3)然后就是在类里边进行属性的设置以及布局等等功能的添加
其实自定义一个日历问题都不多,很多人都会想到通过一个grIDVIEw然后填充就可以,确实是这样,主要是在显示每个月的第一天的位置以及每个月显示多少天有点绕。
思路:通过判断当前星期几然后进行日历的填充,但是填充的大小不能大于当月天数,通过当月第一天是星期几来判断从哪个位置填充。
代码:
package com.example.calenderdemo;import androID.content.Context;import androID.graphics.color;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.BaseAdapter;import androID.Widget.TextVIEw;public class CalendarVIEwAdapter extends BaseAdapter { private Context mContext; private int mCountDay = 49; private int mCurrent_mouth_Countday; private int mCurrent_Week; private int ID[] = { R.string.week7,R.string.week1,R.string.week2,R.string.week3,R.string.week4,R.string.week5,R.string.week6 }; public CalendarVIEwAdapter(Context context,int countday) { this.mContext = context; this.mCurrent_Week = Utils.getCurrentMonthStart(); this.mCurrent_mouth_Countday = countday; } @OverrIDe public int getCount() { return mCountDay; } @OverrIDe public Object getItem(int position) { return null; } @OverrIDe public long getItemID(int position) { return position; } @OverrIDe public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) { VIEwHolder holder = null; if (convertVIEw == null) { holder = new VIEwHolder(); convertVIEw = LayoutInflater.from(mContext).inflate( R.layout.item_calendar,null); holder.mTv_calendar_day = (TextVIEw) convertVIEw .findVIEwByID(R.ID.tv_calendar_day); convertVIEw.setTag(holder); } else holder = (VIEwHolder) convertVIEw.getTag(); if (position <= 6) { holder.mTv_calendar_day.setTextcolor(color.BLACK); holder.mTv_calendar_day.setTextSize(mContext.getResources() .getDimension(R.dimen.text_size_7)); holder.mTv_calendar_day.setText(mContext.getResources().getString( ID[position])); } else { if (mCurrent_Week == 7 && (position -6) <= mCurrent_mouth_Countday) { holder.mTv_calendar_day.setText(position-6 + ""); } else if (position -7>= mCurrent_Week && position - mCurrent_Week -6 <= mCurrent_mouth_Countday) { holder.mTv_calendar_day.setText(position - mCurrent_Week -6 + ""); } } if (position % 7 == 6) { holder.mTv_calendar_day.setBackgroundResource(R.drawable.line_right); }else if (position % 7 == 0) { holder.mTv_calendar_day.setBackgroundResource(R.drawable.line_left); } return convertVIEw; } class VIEwHolder { TextVIEw mTv_calendar_day; }}把grIDVIEw填充了以后一个简单的日历控件就ok了。
Demo:http://xiazai.jb51.net/201609/yuanma/AndroidCalenderDemo(jb51.net).rar
自定义了一个日历以后就要做签到了,签到只要在自定义的Calendar中稍稍修改下就好了,看下效果图:
看这还行,然后DEMO:http://xiazai.jb51.net/201609/yuanma/AndroidCalender(jb51.net).rar
添加了几个方法的Demo:http://xiazai.jb51.net/201609/yuanma/Calenderchange(jb51.net).rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android自定义日历Calender代码实现全部内容,希望文章能够帮你解决Android自定义日历Calender代码实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)