原文地址:
為賓陽等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及賓陽網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站制作、賓陽網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
簡介 由于項目的需求,研究了眾多日歷軟件。本軟件是一款高仿小米的自定義日歷 控件,周月視圖平滑滾動,平滑切換,可以在 xml 文件中進行屬性的配置定制,加入你自己的 RecyclerView 后,實現(xiàn)日歷與列表的無縫連接。
使用此方法給MonthPager添加上相關(guān)監(jiān)聽
初始情況?
點擊一個作為標(biāo)記?
再次點擊后刪除?
3.這里還要感謝前輩的代碼作為參考,畢竟以前也沒有寫過關(guān)于日歷方面的東西,別人確實寫得不錯,我在原基礎(chǔ)上加入了數(shù)據(jù)庫操作等補充,以完成自己實際需求,作為尊重首先給出原作者的連接
就是這里–Android自定義控件實現(xiàn)可多選課程日歷CalendarView
4.然后貼出來關(guān)于數(shù)據(jù)庫操作的代碼,給大家作為參考
DatabaseHelper .java 這是關(guān)于簡單數(shù)據(jù)庫操作的部分
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 簡化數(shù)據(jù)操作接口,避免直接操作數(shù)據(jù)庫,做了再一層的封裝,建議讀者也這樣做,可以讓代碼更清晰,更容易復(fù)用
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中才新增了日歷視圖控件,可以顯示網(wǎng)格狀的日歷內(nèi)容,那么對于3.0以下的版本要使用日歷控件只能借助第三方,目前用的最多的是CalendarView。
android.widget.CalendarView是從android.widget.FrameLayout中繼承。
CalendarView 類提供了基本的日歷設(shè)置方法:
long getDate() 獲取從1970年,1月1日,0點0分0秒到現(xiàn)在的毫秒數(shù),因為返回是long型最終只能截止到2038年
int getFirstDayOfWeek() //獲取當(dāng)天是本周的第幾天,Android123提示返回的定義在java.util.Calendar類中,比如Calendar.Monday為星期一,定義值為2。
long getMaxDate() //獲取CalendarView支持1970年到那天的最大天數(shù)
long getMinDate() //獲取CalendarView支持1970年到那天的最小天數(shù)
boolean getShowWeekNumber() //獲取是否顯示星期號
boolean isEnabled() //是否顯示本日歷視圖
public void setDate (long date, boolean animate, boolean center) //設(shè)置選擇日期到1970年的描述
void setDate(long date) //設(shè)置選擇的日期描述到1970年
void setEnabled(boolean enabled) //設(shè)置是否啟用視圖
void setFirstDayOfWeek(int firstDayOfWeek) //設(shè)置本周起始天數(shù)
void setMaxDate(long maxDate)
void setMinDate(long minDate)
void setOnDateChangeListener(CalendarView.OnDateChangeListener listener) //日歷視圖修改的接口,這個介紹看下面。
void setShowWeekNumber(boolean showWeekNumber) //設(shè)置是否顯示周號
有關(guān)日歷控件CalendarView的設(shè)置接口 android.widget.CalendarView.OnDateChangeListener 只實現(xiàn)了一個回調(diào)方法void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth)。
這四個參數(shù)的具體介紹為
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會發(fā)生卡頓現(xiàn)象,不過這個問題也有人找到解決方案。如下:
解決Android CalendarView顯示卡頓的問題
【問題二】 獲取不到日期問題
在某些手機上,會發(fā)生獲取不到日期的問題,這個問題是非常嚴(yán)重的,因為系統(tǒng)兼容問題導(dǎo)致,這個問題目前沒有解決方案
【問題三】 樣式不一致問題
CalendarView的樣式受到系統(tǒng)的影響,在不同的手機上可能樣式不一樣。
比如,在布局文件中寫一個最簡單的CalendarView布局
但是,在手機上的樣式是這樣的:
總之,一般項目中使用日歷控件都會將原生控件CalendarView排除在外。
[本章完...]