簡體   English   中英

Android日歷布局

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM