Android使用GridView實現(xiàn)日歷的簡單功能
簡單的日歷實現(xiàn),只是顯示了每一個月,沒有顯示當(dāng)天和記事這些功能

主要是計算月初是周幾,月末是周幾,然后相應(yīng)的顯示上一月多少天和下一月多少天。
先看一下關(guān)于日期的用到的幾個工具類
/**
* 獲取該月天數(shù)
*/
public static int getCurrentMonthDay(long millSec) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millSec);
calendar.set(Calendar.DATE, 1);
calendar.roll(Calendar.DATE, -1);
int dateCount = calendar.get(Calendar.DATE);
return dateCount;
}
/**
* 獲取當(dāng)月第一天
*/
public static long getFirOfMonth(long millSec) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millSec);
calendar.set(Calendar.DATE, 1);
return calendar.getTimeInMillis();
}
/**
* 獲取當(dāng)前時間戳
*/
public static long getCurrentTime() {
Calendar calendar = Calendar.getInstance();
return calendar.getTimeInMillis();
}
/**
* 獲取上一月/下一月
*/
public static long getLastOrNextMonth(long millSec, int count) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millSec);
calendar.add(Calendar.MONTH, count);
return calendar.getTimeInMillis();
}
/**
* 格式化到月份
*/
public static String long2str(long millSec) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
return sdf.format(new Date(millSec));
}
用一個List存放每一天,因為之前考慮到每一天有記事這些,所以封裝了一個類,如果不需要的話可以直接一個時間戳就可以。
打開之后先獲取當(dāng)前的時間戳,然后初始化到當(dāng)前月份的第一天,通過工具類中方法。
然后就是計算了,把上月結(jié)余的、本月所有、下月的一起添加到List中。
private void setCalendarList(long millSecs) {
beans.clear();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millSecs);
// int nor = today.getDay();
int max = DateUtil.getCurrentMonthDay(millSecs);
/**
* 當(dāng)月日歷
*/
for (int i = 1; i <= max; i++) {
DayBean bean = new DayBean();
Calendar cc = Calendar.getInstance();
cc.setTimeInMillis(millSecs);
cc.add(Calendar.DAY_OF_MONTH, i - 1);
setBean(bean, cc);
bean.setIsCurrentMonth(true);
beans.add(bean);
}
//上月結(jié)余
int fir_day_of_week = beans.get(0).getCalendar().get(Calendar.DAY_OF_WEEK);
Log.e("AAA", "week_last:" + fir_day_of_week);
if (fir_day_of_week != 2) {
if(fir_day_of_week == 1){
for (int i = 0; i < 6; i++) {
DayBean bean = new DayBean();
Calendar cc = Calendar.getInstance();
cc.setTimeInMillis(millSecs);
cc.add(Calendar.DAY_OF_MONTH, -i -1);
setBean(bean, cc);
Log.e("AAA", "last:" + bean.getDay());
bean.setIsCurrentMonth(false);
beans.add(0, bean);
}
}else{
for (int i = 0; i < fir_day_of_week-2; i++) {
DayBean bean = new DayBean();
Calendar cc = Calendar.getInstance();
cc.setTimeInMillis(millSecs);
cc.add(Calendar.DAY_OF_MONTH, -i-1);
setBean(bean, cc);
Log.e("AAA", "last:" + bean.getDay());
bean.setIsCurrentMonth(false);
beans.add(0, bean);
}
}
}
//下月
int last_day_of_week = beans.get(beans.size() - 1).getCalendar().get(Calendar.DAY_OF_WEEK);
Log.e("AAA", "week_next:" + last_day_of_week);
if (last_day_of_week != 1) {
for (int i = last_day_of_week; i < 8; i++) {
DayBean bean = new DayBean();
Calendar cc = Calendar.getInstance();
cc.setTimeInMillis(millSecs);
cc.add(Calendar.DAY_OF_MONTH, i - last_day_of_week);
setBean(bean, cc);
Log.e("AAA", "next:" + bean.getDay());
bean.setIsCurrentMonth(false);
beans.add(bean);
}
}
GridViewAdapter adapter = new GridViewAdapter(this, beans);
mGridView.setAdapter(adapter);
}
private void setBean(DayBean bean, Calendar cc) {
bean.setCalendar(cc);
bean.setDay(cc.get(Calendar.DAY_OF_MONTH));
}
設(shè)置每一天時設(shè)置了一個字段為是否為本月,如果是,則設(shè)置為黑色,否則設(shè)為灰色顯示,在Adapter中的getView方法中設(shè)置即可。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_layout, null);
holder = new ViewHolder();
holder.day_text = (TextView) convertView.findViewById(R.id.day_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.day_text.setText(beans.get(position).getDay() + "");
if (beans.get(position).isToday()) {
holder.day_text.setBackgroundColor(Color.RED);
} else {
holder.day_text.setBackgroundColor(Color.WHITE);
}
if (beans.get(position).isCurrentMonth()) {
holder.day_text.setTextColor(Color.BLACK);
} else {
holder.day_text.setTextColor(Color.GRAY);
}
return convertView;
}
class ViewHolder {
TextView day_text;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android自定義控件實現(xiàn)可多選課程日歷CalendarView
- Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用
- Android 一個日歷控件的實現(xiàn)代碼
- Android實現(xiàn)自定義日歷
- Android自定義日歷控件實例詳解
- Android實現(xiàn)日歷控件示例代碼
- android自定義view之實現(xiàn)日歷界面實例
- Android自定義日歷Calender代碼實現(xiàn)
- Android 仿日歷翻頁、仿htc時鐘翻頁、數(shù)字翻頁切換效果
- Android可簽到日歷控件的實現(xiàn)方法
- Android開發(fā)之日歷CalendarView用法示例
相關(guān)文章
Android 通過Base64上傳圖片到服務(wù)器實現(xiàn)實例
這篇文章主要介紹了Android 通過Base64上傳圖片到服務(wù)器實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android listview數(shù)據(jù)顯示及提示信息的實例
這篇文章主要介紹了Android listview數(shù)據(jù)顯示及提示信息的實例的相關(guān)資料,需要的朋友可以參考下2017-05-05
android webview中使用Java調(diào)用JavaScript方法并獲取返回值
這篇文章主要介紹了android webview中使用Java調(diào)用JavaScript方法并獲取返回值,本文直接給出代碼示例,需要的朋友可以參考下2015-03-03
Android 應(yīng)用適配 Android 7.0 權(quán)限要求詳解
今天小編就為大家分享一篇Android 應(yīng)用適配 Android 7.0 權(quán)限要求詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Android ProgressBar實現(xiàn)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了Android ProgressBar實現(xiàn)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04

