Android考勤日历控件

本文介绍了一种自定义的Android考勤日历控件的实现,能够展示当前月日期并切换月份,通过不同颜色表示考勤状态。控件与ViewPager和Fragment配合使用,可无限滑动。文章详细讲解了如何调用和自定义日历控件,包括创建DateEntity对象记录考勤状态,自定义DateWidgetDayCellN绘制不同状态的颜色,以及DateViewN的布局和逻辑处理。
摘要由CSDN通过智能技术生成

     工作这么久,第一次在CSDN上写技术博客,望大家多多支持;

     本篇博文给大家分享一个考勤日历控件,这里有个需求:要求显示当前月的日期,左右可以切换月份来查看日期。可以通过不同的颜色表示每天的考勤状态; 这里我自定义了一个日历控件,大家以后可以根据自己的需求来修改代码。首先大家来看一下效果图:

             

 一、为了让大家可以尽快的使用改控件,我首先会从如何调用该控件入手给大家讲解:

      由于在效果上可以无限滑动,需要将我自定义的日历控件与ViewPager、Fragment控件配合使用,这样是得调用过程稍有复杂,请大家注意我的调用步骤:

      1、将自定义DateViewN与DateWidgetDayCellN拷贝到自己的src下的包中,然后在将其使用到Fragment布局文件中,如下面代码,其中“com.selfview.calendar1“为我的src下的包目录,DateViewN为我自定义的柱状图View:

	
	/.........................../ 
     <com.selfview.calendar1.DateViewN
        android:id="@+id/dateview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
	/.........................../


 2、创建一个Fragment类,调用上面建立的布局文件,下面我将关键代码贴出,并加以解释:

      (1)在这个类中,我们应重点关注create(int pageNumber)这个方法,在ViewPager的滑动过程中,可以用ViewPager的页面编号,通过这个方法生成我们所需的Fragment;

      (2)mPageNumber = getArguments().getInt(ARG_PAGE);// 获取当前页面编号;

      (3)dateViewN.setShowDate(mPageNumber);//设置当前页面对应的自定义日历控件中的日期;

      (4)dateViewN.setEntities(dateEntities);// 将数据集合放入自定义日历控件中

 public static final String ARG_PAGE = "page";// key值
	private int mPageNumber;// 当前页码
	private DateViewN dateViewN;// 日历控件
	private String currentMonth;// 当前月
	private ArrayList<DateEntity> dateEntities;// 考勤数据集合
  	/.........................../
 
     public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
 		/.........................../
		mPageNumber = getArguments().getInt(ARG_PAGE);// 获取当前页面编号
	}
	 /.........................../
    // 创建ItemFragmentDate通过ViewPager的页面编号
	public static Fragment create(int pageNumber) {
		ItemFragmentDate fragment = new ItemFragmentDate();
		Bundle args = new Bundle();
		args.putInt(ARG_PAGE, pageNumber);
		fragment.setArguments(args);
		return fragment;
	}
	public ItemFragmentDate() {
	}
   /.........................../
	dateViewN = (DateViewN) rootView.findViewById(R.id.dateview);// 初始日历控件
	dateViewN.setShowDate(mPageNumber);//设置当前页面对应的自定义日历控件中的日期
	currentMonth = dateViewN.getDateEntity().year + "-"
					+ getAddZero(dateViewN.getDateEntity().month + "");//获取当前页面对应的年月
	getDateEntityToNet(currentMonth);//通过当前月向网络获取数据
      /.........................../
	dateViewN.setEntities(dateEntities);// 将数据集合放入自定义日历控件中

  3、自定义ViewPager适配器:

       其中我定义ViewPager的总页面为1000页,对我的考勤日历来说已经足够,大家使用时可根据自己的需求来定

public class CalendarAdapter extends FragmentStatePagerAdapter {
	private final int ALL_PAGE_NUM = DateViewN.PAER_NUM * 2;// 设置页面总数
	public CalendarAdapter(FragmentManager fm) {
		super(fm);
		// TODO Auto-generated constructor stub
	}
	@Override
	public Fragment getItem(int arg0) {
		return ItemFragmentDate.create(arg0);// 根据传入的页面当前页面编号生成ItemFragmentDate对象碎片
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return ALL_PAGE_NUM;
	}
}

 4、配置主页面布局,也就是调用一个ViewPager:

 /.........................../
<android.support.v4.view.ViewPager
        android:id="@+id/viewpager_calender"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_gravity="center"
        android:layout_weight="1" >
    </android.support.v4.view.ViewPager>
  /.........................../
  5、编写主页面代码:

/.........................../
    private ViewPager viewpager_calender;// 左右滑动控件
	private CalendarAdapter calendarAdapter;// ViewPager的适配器
	private int startPageNum = DateViewN.PAER_NUM;// 将当前页面设置成第500个页面,往前可以滑动499次,499个月,对应考勤而言已经足够
  /.........................../
	viewpager_calender = (ViewPager) findViewById(R.id.viewpager_calender);
	calendarAdapter = new CalendarAdapter(getSupportFragmentManager());
	viewpager_calender.setAdapter(calendarAdapter);// 设置ViewPager适配器
	viewpager_calender.setCurrentItem(currentPageNum);
/.........................../


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值