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