【问题标题】:Android Calendar LayoutAndroid 日历布局
【发布时间】:2014-09-05 10:36:31
【问题描述】:

我的日历布局如下所示:

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,它正在使用一个带有 Button 的 RelativeLayout,它有另一个布局作为背景,现在不应该相关。

有什么建议...?谢谢:)

【问题讨论】:

  • 忘了说在我的日历中,我不输出上个月或下个月的天数,只输出当前天数。
  • 任何建议...? - 您可以在开始时插入一些空白单元格天以偏移起始位置。
  • 干杯,Luksprog!会尝试那个:) 虽然我不太确定我应该如何将“无”添加为尾随月份的天数
  • 你没有说任何关于你的适配器的实现,但是如果你给它传递了一些项目的列表,你会添加(在第一个位置)一些虚拟项目,所以其中的项目总数list 是 7 的倍数(然后将其传递给适配器)。您可能需要对适配器进行一些其他更改,以使这些项目在视觉上为空白、不可选择等

标签: java android android-layout calendar android-studio


【解决方案1】:

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

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

    }

这里的“月”是当前日历月的对象

【讨论】:

    【解决方案2】:
        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);
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 2013-12-17
      • 1970-01-01
      • 2013-03-21
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多