Android自定义日历Calender代码实现

产品要做签到功能,签到功能要基于一个日历来进行,所以就根据 要求自定义了一个日历

自定义控件相信做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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android 开发教程之日历项目实践(二)

    一.创建 Android Project 在新建对话框中输入 App 属性,SDK版本全部选最新的,不作版本兼容.主题选择 Holo Dark. 下一步,使用默认设置 下一步,使用默认设置 下一步,使用默认配置 下一步,使用默认设置 创建完成后的初始画面 在上面的步骤中,我们选择了创建 MainActivity,ADT 帮我们在 src 目录下生成了 MainActivity.java 文件,在 res/layout/ 目录下生成了 activity_main.xml 文件,并在编辑窗口打开,如

  • Android自定义控件实现可多选课程日历CalendarView

    可多选课程日历CalendarView的效果图 开发环境 IDE版本:AndroidStudio2.0 物理机版本:Win7旗舰版(64位) 前言 最近的项目中用到了一个课程选择的日历View,于是在网上搜了搜自定义日历View,发现基本上都是单选的,不能够满足项目中的需求.于是自己重新造了个轮子,写了个可以被多选的自定义日历View.最后面会给出GitHub地址. 代码实现 package widget; import android.content.Context; import andro

  • Android自定义可标记日历效果

    先直接看看效果吧 初始情况 点击一个作为标记 再次点击后删除 3.这里还要感谢前辈的代码作为参考,毕竟以前也没有写过关于日历方面的东西,别人确实写得不错,我在原基础上加入了数据库操作等补充,以完成自己实际需求,作为尊重首先给出原作者的连接 就是这里–>Android自定义控件实现可多选课程日历CalendarView 4.然后贴出来关于数据库操作的代码,给大家作为参考 DatabaseHelper .java 这是关于简单数据库操作的部分 package com.xugongming38.edi

  • Android自定义日历控件实例详解

    为什么要自定义控件 有时,原生控件不能满足我们对于外观和功能的需求,这时候可以自定义控件来定制外观或功能:有时,原生控件可以通过复杂的编码实现想要的功能,这时候可以自定义控件来提高代码的可复用性. 如何自定义控件 下面我通过我在github上开源的Android-CalendarView项目为例,来介绍一下自定义控件的方法.该项目中自定义的控件类名是CalendarView.这个自定义控件覆盖了一些自定义控件时常需要重写的一些方法. 构造函数 为了支持本控件既能使用xml布局文件声明,也可在ja

  • java制作android 日历代码分享

    代码很简单,就不多废话了 复制代码 代码如下: //读取日历事件     public static void getCalendarInfo(Activity activity,String tag){         String[] projection = new String[]{CalendarContract.Events._ID,CalendarContract.Events.TITLE};         ContentResolver cr = activity.getCon

  • android 开发教程之日历项目实践(一)

    前言:决定开始学习 Android 平台下的软件开发,以日历作为实践项目,进行一周后,基本完成. 为了总结及笔记,并给有需要的朋友借鉴,开始整理本教程. 开始之前: 在编写程序之前,需要进行项目设计,因为是练习项目,主要是确定软件 UI 界面,这是已经完成的屏幕截图: 对这个画面,进一步作分解: 这里总共分解为三个 View 文件: 1:activity_main.xml 作为启动的主画面,新建项目时,首先生成. 2:view_calendar_table.xml 定义月历视图,头部固定,其它行

  • Android实现自定义日历

    自定义日历控件,支持旧历.节气.日期标注.点击操作 (参考网络上的日历控件改写) 注:将下面的四张资源图片拷贝到所建包的下一个image目录中,如Calendar.java 所在包为 cc.util.android.view,则需要再创建一个包cc.util.android.view.image 然后将图片拷贝进去 /****************从此出开始将代码拷贝到一个文件中*******************/ package cc.util.android.view; import

  • Android使用GridView实现日历的简单功能

    简单的日历实现,只是显示了每一个月,没有显示当天和记事这些功能 主要是计算月初是周几,月末是周几,然后相应的显示上一月多少天和下一月多少天. 先看一下关于日期的用到的几个工具类 /** * 获取该月天数 */ public static int getCurrentMonthDay(long millSec) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(millSec); calendar.set(

  • Android使用GridLayout绘制自定义日历控件

    效果图 思路:就是先设置Gridlayout的行列数,然后往里面放置一定数目的自定义日历按钮控件,最后实现日历逻辑就可以了. 步骤: 第一步:自定义日历控件(初步) 第二步:实现自定义单个日期按钮控件 第三步:将第二步得到的控件动态添加到第一步的布局中,并实现日期逻辑 第四步:编写单个日期点击监听器接口 第一步:自定义日历控件(初步) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmln

  • Android实现日历控件示例代码

    做的是一个酒店的项目,可以选择入住和离开的日期.声明为了省事在网上找的资料,自己修改的逻辑,希望对需要的朋友有帮助.喜欢的给个好评.谢谢啦!祝生活愉快! 先上图 第一步,搭建布局xml <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_w

随机推荐