扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
原文地址:
为宾阳等地区用户提供了全套网页设计制作服务,及宾阳网站建设行业解决方案。主营业务为网站建设、网站制作、宾阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
简介 由于项目的需求,研究了众多日历软件。本软件是一款高仿小米的自定义日历 控件,周月视图平滑滚动,平滑切换,可以在 xml 文件中进行属性的配置定制,加入你自己的 RecyclerView 后,实现日历与列表的无缝连接。
使用此方法给MonthPager添加上相关监听
初始情况
点击一个作为标记
再次点击后删除
3.这里还要感谢前辈的代码作为参考,毕竟以前也没有写过关于日历方面的东西,别人确实写得不错,我在原基础上加入了数据库操作等补充,以完成自己实际需求,作为尊重首先给出原作者的连接
就是这里–Android自定义控件实现可多选课程日历CalendarView
4.然后贴出来关于数据库操作的代码,给大家作为参考
DatabaseHelper .java 这是关于简单数据库操作的部分
package com.xugongming38.editcalendar.utils; import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper; /** * Created by dell on 2017/5/18. */ public class DatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_DIARY = "create table Hair(" + "id integer primary key autoincrement, " + "content text)"; private Context mContext; public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){ super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_DIARY); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists Hair"); onCreate(db); }}
DataHelper .java 简化数据操作接口,避免直接操作数据库,做了再一层的封装,建议读者也这样做,可以让代码更清晰,更容易复用
package com.xugongming38.editcalendar.utils; import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList;import java.util.List; /** * Created by dell on 2017/5/18. */ public class DataHelper { public static DatabaseHelper mHelper; public static void deleteData2List(String content) { SQLiteDatabase dbDelete = mHelper.getWritableDatabase(); dbDelete.delete("Hair", "content = ?", new String[]{content}); } public static void addData2List(String content) { SQLiteDatabase db = mHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("content", content); db.insert("Hair", null, values); values.clear(); } public static ListString getDataList(Context context) { if(mHelper==null){ mHelper = new DatabaseHelper(context, "Hair.db", null, 1); } ListString dataList = new ArrayList(); SQLiteDatabase sqLiteDatabase = mHelper.getWritableDatabase(); Cursor cursor = sqLiteDatabase.query("Hair", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { String content = cursor.getString(cursor.getColumnIndex("content")); dataList.add(content); } while (cursor.moveToNext()); } cursor.close(); return dataList; }}
在Android平台3.0中才新增了日历视图控件,可以显示网格状的日历内容,那么对于3.0以下的版本要使用日历控件只能借助第三方,目前用的最多的是CalendarView。
android.widget.CalendarView是从android.widget.FrameLayout中继承。
CalendarView 类提供了基本的日历设置方法:
long getDate() 获取从1970年,1月1日,0点0分0秒到现在的毫秒数,因为返回是long型最终只能截止到2038年
int getFirstDayOfWeek() //获取当天是本周的第几天,Android123提示返回的定义在java.util.Calendar类中,比如Calendar.Monday为星期一,定义值为2。
long getMaxDate() //获取CalendarView支持1970年到那天的最大天数
long getMinDate() //获取CalendarView支持1970年到那天的最小天数
boolean getShowWeekNumber() //获取是否显示星期号
boolean isEnabled() //是否显示本日历视图
public void setDate (long date, boolean animate, boolean center) //设置选择日期到1970年的描述
void setDate(long date) //设置选择的日期描述到1970年
void setEnabled(boolean enabled) //设置是否启用视图
void setFirstDayOfWeek(int firstDayOfWeek) //设置本周起始天数
void setMaxDate(long maxDate)
void setMinDate(long minDate)
void setOnDateChangeListener(CalendarView.OnDateChangeListener listener) //日历视图修改的接口,这个介绍看下面。
void setShowWeekNumber(boolean showWeekNumber) //设置是否显示周号
有关日历控件CalendarView的设置接口 android.widget.CalendarView.OnDateChangeListener 只实现了一个回调方法void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth)。
这四个参数的具体介绍为
view The view associated with this listener.
year The year that was set.
month The month that was set [0-11].
dayOfMonth The day of the month that was set.
【问题一】 卡顿问题
有人打开CalendarView会发生卡顿现象,不过这个问题也有人找到解决方案。如下:
解决Android CalendarView显示卡顿的问题
【问题二】 获取不到日期问题
在某些手机上,会发生获取不到日期的问题,这个问题是非常严重的,因为系统兼容问题导致,这个问题目前没有解决方案
【问题三】 样式不一致问题
CalendarView的样式受到系统的影响,在不同的手机上可能样式不一样。
比如,在布局文件中写一个最简单的CalendarView布局
但是,在手机上的样式是这样的:
总之,一般项目中使用日历控件都会将原生控件CalendarView排除在外。
[本章完...]
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流