[英]Android Calendar Layout
我的日歷布局看起來像這樣:
A B C D E F G
A B C D E F G
A B C D E F G
A B C D
我想使日歷的第一天開始,例如,從第四個元素的位置開始(此實現應僅對日歷的第一行可用),如下所示:
blank A B C D
A B C D E F
A B C D E F
A B C D E F
我對此有一個GridView,它使用的是帶有按鈕的RelativeLayout,該按鈕具有作為背景的另一個布局,該布局現在不相關。
有什么建議...嗎? 謝謝 :)
您在通知數據集更改之前使用此功能。
public void refreshDays() {
// clear items
items.clear();
flagDepartureDate = false;
flagArrivalDate = false;
int lastDay = month.getActualMaximum(Calendar.DAY_OF_MONTH);
int firstDay = month.get(Calendar.DAY_OF_WEEK);
Calendar temp = (Calendar) month.clone();
temp.add(Calendar.MONTH, -1);
Calendar temp2 = (Calendar) month.clone();
temp2.add(Calendar.MONTH, +1);
int lastDay_prev = temp.getActualMaximum(Calendar.DAY_OF_MONTH);
/*
* if(((firstDay-1)+lastDay)>35) {
*/
calDay.days = new String[42];
calDay.month = new int[42];
calDay.year = new int[42];
/*
* } else{ calDay.days = new String[35]; calDay.month = new int[35];
* calDay.year = new int[35]; }
*/
// Log.i("LAST DAY", lastDay+"");
// Log.i("LAST DAY PREV", lastDay_prev+"");
// Log.i("FIRST DAY", firstDay+"");
// Log.i("FIRST_DAY_OF_WEEK", FIRST_DAY_OF_WEEK+"");
int start_blanks = 0;
int j = FIRST_DAY_OF_WEEK;
// populate empty days before first real day
if (firstDay > 1) {
for (j = 0; j < firstDay - FIRST_DAY_OF_WEEK - 1; j++) {
calDay.days[j] = ""
+ (lastDay_prev - (firstDay - FIRST_DAY_OF_WEEK - 1)
+ j + 1);
calDay.month[j] = temp.get(Calendar.MONTH);
calDay.year[j] = temp.get(Calendar.YEAR);
start_blanks += 1;
}
} else {
for (j = 0; j < FIRST_DAY_OF_WEEK * 6; j++) {
calDay.days[j] = "";
}
j = FIRST_DAY_OF_WEEK * 6; // sunday => 1, monday => 7
}
// Log.i("START_BLANK", start_blanks+"");
// populate days
int dayNumber = 1;
for (int i = j; i < (lastDay + start_blanks); i++) {
calDay.days[i] = "" + dayNumber;
calDay.month[i] = month.get(Calendar.MONTH);
calDay.year[i] = month.get(Calendar.YEAR);
dayNumber++;
}
// populate empty days before first real day
for (int i = (lastDay + start_blanks), k = 1; i < calDay.days.length; i++, k++) {
calDay.days[i] = "" + k;
calDay.month[i] = temp2.get(Calendar.MONTH);
calDay.year[i] = temp2.get(Calendar.YEAR);
}
}
這里的“月”是當前日歷月的對象
public class GridCellAdapter extends BaseAdapter implements OnClickListener {
private static final String tag = "GridCellAdapter";
private final Context _context;
private final List<String> list;
private static final int DAY_OFFSET = 1;
private final String[] weekdays = new String[] { "Sun", "Mon", "Tue",
"Wed", "Thu", "Fri", "Sat" };
private final String[] months = { "JANUARY", "FEBRUARY", "MARCH",
"APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER",
"OCTOBER", "NOVEMBER", "DECEMBER" };
private final int[] daysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30,
31, 30, 31 };
private int daysInMonth;
private int currentDayOfMonth;
private int currentWeekDay;
private Button gridcell;
private TextView num_events_per_day;
private final SimpleDateFormat dateFormatter = new SimpleDateFormat(
"dd-MMM-yyyy");
// Days in Current Month
public GridCellAdapter(Context context, int textViewResourceId,
int month, int year) {
super();
this._context = context;
this.list = new ArrayList<String>();
Log.d(tag, "==> Passed in Date FOR Month: " + month + " "
+ "Year: " + year);
Calendar calendar = Calendar.getInstance();
setCurrentDayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
setCurrentWeekDay(calendar.get(Calendar.DAY_OF_WEEK));
Log.d(tag, "New Calendar:= " + calendar.getTime().toString());
Log.d(tag, "CurrentDayOfWeek :" + getCurrentWeekDay());
Log.d(tag, "CurrentDayOfMonth :" + getCurrentDayOfMonth());
// Print Month
printMonth(month, year);
}
private void printMonth(int mm, int yy) {
Log.d(tag, "==> printMonth: mm: " + mm + " " + "yy: " + yy);
int trailingSpaces = 0;
int daysInPrevMonth = 0;
int prevMonth = 0;
int prevYear = 0;
int nextMonth = 0;
int nextYear = 0;
int currentMonth = mm - 1;
String currentMonthName = getMonthAsString(currentMonth);
daysInMonth = getNumberOfDaysOfMonth(currentMonth);
Log.d(tag, "Current Month: " + " " + currentMonthName + " having "
+ daysInMonth + " days.");
GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, 1);
Log.d(tag, "Gregorian Calendar:= " + cal.getTime().toString());
if (currentMonth == 11) {
prevMonth = currentMonth - 1;
daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
nextMonth = 0;
prevYear = yy;
nextYear = yy + 1;
Log.d(tag, "*->PrevYear: " + prevYear + " PrevMonth:"
+ prevMonth + " NextMonth: " + nextMonth
+ " NextYear: " + nextYear);
} else if (currentMonth == 0) {
prevMonth = 11;
prevYear = yy - 1;
nextYear = yy;
daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
nextMonth = 1;
Log.d(tag, "**--> PrevYear: " + prevYear + " PrevMonth:"
+ prevMonth + " NextMonth: " + nextMonth
+ " NextYear: " + nextYear);
} else {
prevMonth = currentMonth - 1;
nextMonth = currentMonth + 1;
nextYear = yy;
prevYear = yy;
daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
Log.d(tag, "***---> PrevYear: " + prevYear + " PrevMonth:"
+ prevMonth + " NextMonth: " + nextMonth
+ " NextYear: " + nextYear);
}
int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) - 1;
trailingSpaces = currentWeekDay;
Log.d(tag, "Week Day:" + currentWeekDay + " is "
+ getWeekDayAsString(currentWeekDay));
Log.d(tag, "No. Trailing space to Add: " + trailingSpaces);
Log.d(tag, "No. of Days in Previous Month: " + daysInPrevMonth);
if (cal.isLeapYear(cal.get(Calendar.YEAR)))
if (mm == 2)
++daysInMonth;
else if (mm == 3)
++daysInPrevMonth;
// Trailing Month days
// Current Month Days
for (int i = 1; i <= daysInMonth; i++) {
Log.d(currentMonthName, String.valueOf(i) + " "
+ getMonthAsString(currentMonth) + " " + yy);
if (i == getCurrentDayOfMonth()) {
list.add(String.valueOf(i) + "-BLUE" + "-"
+ getMonthAsString(currentMonth) + "-" + yy);
} else {
list.add(String.valueOf(i) + "-WHITE" + "-"
+ getMonthAsString(currentMonth) + "-" + yy);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.