2014-09-05 85 views
1

我的日历布局看起来是这样的:Android的Google日历布局

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在这一个按钮,有作为背景另一个布局,不应该现在有关。

有什么建议吗?谢谢:)

+1

有助于ühttp://droidwalk.blogspot.in/2012/11/android-calendar-sample.html – 2014-09-05 10:44:44

+0

忘记要提到在我的日历中,我不输出前一个或下一个月的日子,只是当前的一个日子。 – funkycookie 2014-09-05 10:47:28

+0

*任何建议...?* - 您可以在开始时插入一些空白单元格以抵消起始位置。 – Luksprog 2014-09-05 10:48:06

回答

0

在您通知您数据集更改之前,您可以使用此功能。

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); 
     } 

    } 

这里的 “月” 为公历月的目标

0
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); 
       } 
      } 
     }