Java Android日历布局
我的日历布局如下所示:Java Android日历布局,java,android,android-layout,calendar,android-studio,Java,Android,Android Layout,Calendar,Android Studio,我的日历布局如下所示: 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 我想让日历的第一天开始,例如,从第四个元素的位置开始(此实现应仅适用于日历的第一行),如下所示: 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
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
我想让日历的第一天开始,例如,从第四个元素的位置开始(此实现应仅适用于日历的第一行),如下所示:
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 void refreshDays(){
//清除项目
items.clear();
flagDepartureDate=false;
flagArrivalDate=false;
int lastDay=month.getActualMaximum(日历,每月的第天);
int firstDay=month.get(日历。一周中的第几天);
日历温度=(日历)月。克隆();
临时添加(日历月份,-1);
Calendar temp2=(Calendar)month.clone();
temp2.add(日历月+1);
int lastDay\u prev=临时getActualMaximum(日历日,每月);
/*
*如果(((第一天-1)+最后一天)>35){
*/
calDay.days=新字符串[42];
calDay.month=新整数[42];
calDay.year=新整数[42];
/*
*}else{calDay.days=new String[35];calDay.month=new int[35];
*calDay.year=新整数[35];}
*/
//Log.i(“最后一天”,“最后一天+”);
//Log.i(“上一天”,上一天“+”);
//Log.i(“第一天”,第一天+”);
//Log.i(“每周第一天”,每周第一天+”;
int start_blanks=0;
int j=每周的第一天;
//填充第一个实际日之前的空日
如果(第一天>1){
对于(j=0;j1,星期一=>7
}
//Log.i(“开始空白”,开始空白+”);
//填充天数
int dayNumber=1;
对于(int i=j;i<(最后一天+开始_空格);i++){
calDay.days[i]=''+日数;
calDay.month[i]=month.get(Calendar.month);
calDay.year[i]=月.get(日历.year);
dayNumber++;
}
//填充第一个实际日之前的空日
对于(int i=(lastDay+start_空格),k=1;i
此处“month”是当前日历月的对象公共类GridCellAdapter扩展BaseAdapter实现OnClickListener{
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);
}
}
}
私有静态最终字符串tag=“GridCellAdapter”;
私有最终上下文_上下文;
私人最终名单;
私人静态最终整数日_偏移=1;
私有最终字符串[]工作日=新字符串[]{“Sun”、“Mon”、“Tue”,
“星期三”、“星期四”、“星期五”、“星期六”};
私有最终字符串[]月={“一月”、“二月”、“三月”,
“四月”、“五月”、“六月”、“七月”、“八月”、“九月”,
“十月”、“十一月”、“十二月”};
私人最终整数[]天每月={31,28,31,30,31,30,31,30,31,30,
31, 30, 31 };
私人国际日每月;
私人int currentDayOfMonth;
工作日内的私人时间;
私有按钮网格单元;
私有文本查看每天的事件数;
private final SimpleDataFormat dateFormatter=新SimpleDataFormat(
“dd-MMM-yyyy”);
//当月天数
公共GridCellAdapter(上下文,int textViewResourceId,
整数月,整数年){
超级();
这._context=context;
this.list=new ArrayList();
Log.d(标记“==>月份的传入日期:“+Month+”)
+“年:“+年”;
日历=Calendar.getInstance();
setCurrentDayOfMonth(calendar.get(calendar.DAY/u/u MONTH));
setCurrentWeekDay(calendar.get(calendar.DAY OF the u WEEK));
Log.d(标记“newcalendar:=”+Calendar.getTime().toString());
d(标记“CurrentDayOfWeek:+getCurrentWeekDay());
d(标记“CurrentDayOfMonth:+getCurrentDayOfMonth());
//打印月份
打印月份(月、年);
}
私人月(整数毫米,整数年){
Log.d(tag,==>printmount:mm:+mm++++yy:+yy);
int trailingSpaces=0;
int daysInPrevMonth=0;
int prevMonth=0;
整年=0;
int nextMonth=0;
int-nextYear=0;
int currentMonth=mm-1;
字符串currentMonthName=GetMonthString(currentMonth);
daysInMonth=getNumberOfDaysOfMonth(当前月);
Log.d(标记“当前月份:”+“”+currentMonthName+“具有”
+daysInMonth+天“);
GregorianCalendar cal=新的GregorianCalendar(yy,当前月份,1);
Log.d(标记“公历:=”+cal.getTime().toString());
如果(当前月份==11){
prevMonth=currentMonth-1;
daysInPrevMonth=getNumberOfDaysOfMonth(prevMonth);
nex