如何在android中进行计划/业务日历

时间:2014-03-04 04:49:19

标签: android android-layout android-intent android-listview calendar

我计划在日期之下制作包含动态事件的日历。但我没有得到关于它的好样本。 什么是精确的名称调用如下图所示在android或分享一些想法。我有很多apk和相关的图像。 但它背后没有确切的想法,android是否支持它。我计划在月,周,日显示日历。 在谷歌搜索很多我写这个。 它是否支持从2.3到4的所有版本。我在上面的verison 4上看到了一些博客业务日历支持。 非常感谢善良和好主意。

enter image description here

1 个答案:

答案 0 :(得分:10)

尝试使用GridView下面的Gridview Adapter代码实现{/ 1}}。

public class GridCellAdapter extends BaseAdapter //implements OnClickListener 
 {
  private final Context _context;

  private final List list;
  private static final int DAY_OFFSET = 1;
  private final String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct","Nov", "Dec" };
  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;
  Calendar calendar;
  private Button gridcell;

  List objects;

  // Days in Current Month
  public GridCellAdapter(Context context, int textViewResourceId, int month, int year, List objects) 
  {
   super();
   this._context = context;
   this.list = new ArrayList();
   this.objects=objects;
   Calendar calendar = Calendar.getInstance();
   setCurrentDayOfMonth(calendar.get(Calendar.DAY_OF_MONTH));
   setCurrentWeekDay(calendar.get(Calendar.DAY_OF_WEEK));

   // Print Month
   printMonth(month, year);
  }

  private String getMonthAsString(int i) 
  {
   return months[i];
  }

  private int getNumberOfDaysOfMonth(int i) 
  {
   return daysOfMonth[i];
  }

  public String getItem(int position) 
  {
   return list.get(position);
  }

  @Override
  public int getCount()
  {
   return list.size();
  }

  /**
   * Prints Month
   * 
   * @param mm
   * @param yy
   */
  private void printMonth(int mm, int yy) 
  {
   int trailingSpaces = 0;
   int daysInPrevMonth = 0;
   int prevMonth = 0;
   int prevYear = 0;
   int nextMonth = 0;
   int nextYear = 0;

   int currentMonth = mm - 1;
   getMonthAsString(currentMonth);
   daysInMonth = getNumberOfDaysOfMonth(currentMonth);

   GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, 1);
   if (currentMonth == 11) 
   {
    prevMonth = currentMonth - 1;
    daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
    nextMonth = 0;
    prevYear = yy;
    nextYear = yy + 1;
   }
   else if (currentMonth == 0) 
   {
    prevMonth = 11;
    prevYear = yy - 1;
    nextYear = yy;
    daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
    nextMonth = 1;
   } 
   else 
   {
    prevMonth = currentMonth - 1;
    nextMonth = currentMonth + 1;
    nextYear = yy;
    prevYear = yy;
    daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth);
   }

   int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) - 1;
   trailingSpaces = currentWeekDay;

   if (cal.isLeapYear(cal.get(Calendar.YEAR)))
   {
    if (mm == 2)
    {
     ++daysInMonth;
    }
    else if (mm == 3)
    {
     ++daysInPrevMonth;
    }
   }

   for (int i = 0; i < trailingSpaces; i++) 
   {
    list.add(String.valueOf((daysInPrevMonth - trailingSpaces + DAY_OFFSET) + i) + "-GREY" + "-" + getMonthAsString(prevMonth)+ "-" + prevYear+"-no");
   }

   // Current Month Days
   for (int i = 1; i <= daysInMonth; i++)
   {
    if (i == getCurrentDayOfMonth()) 
    {
     list.add(String.valueOf(i) + "-BLUE" + "-" + getMonthAsString(currentMonth) + "-" + yy+"-yes");
    }
    else 
    {
     list.add(String.valueOf(i) + "-WHITE" + "-" + getMonthAsString(currentMonth) + "-" + yy+"-no");
    }
   }

   // Leading Month days
   for (int i = 0; i < list.size() % 7; i++) 
   {
    list.add(String.valueOf(i + 1) + "-GREY" + "-" + getMonthAsString(nextMonth) + "-" + nextYear+"-no");
   }
  }

  @Override
  public long getItemId(int position) 
  {
   return position;
  }

  @Override
  public View getView(final int position, View convertView, ViewGroup parent)
  {
   View row = convertView;
   if (row == null) 
   {
    LayoutInflater inflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.screen_gridcell, parent, false);
   }

   gridcell = (Button) row.findViewById(R.id.calendar_day_gridcell);

   String[] day_color = list.get(position).split("-");
   String theday = day_color[0];
   gridcell.setText(theday.trim());
   gridcell.setTag("");

   Calendar calendar = Calendar.getInstance();
      calendar.set(Integer.parseInt(day_color[3].trim()), convertMonthToInt(day_color[2].trim())-1, Integer.parseInt(day_color[0].trim()));
       int val = calendar.get(Calendar.DAY_OF_WEEK);


   gridcell.setGravity(Gravity.CENTER);

   gridcell.setBackgroundResource(R.drawable.cal_box_grey);

   if (day_color[1].equals("GREY")) 
   {
    gridcell.setBackgroundResource(R.drawable.cal_box_grey);
    gridcell.setTextColor(getResources().getColor(R.color.gray));
   }
   if (day_color[1].equals("WHITE")) 
   {
    gridcell.setBackgroundResource(R.drawable.cal_box);    
    gridcell.setTextColor(getResources().getColor(R.color.purple_dark));
    if(val == 1 || val == 7)
        {
         gridcell.setBackgroundResource(R.drawable.circle_grey_border);    
         gridcell.setTextColor(getResources().getColor(R.color.lightgray02));
        }
   }

   for (int i = 0; i < objects.size(); i++) 
   {
    if(Integer.parseInt(theday)==Integer.parseInt((objects.get(i).day))
      && day_color[2].equals(objects.get(i).month))
    {
     gridcell.setTag(objects.get(i).title+":::"+objects.get(i).address+":::"+objects.get(i).image
       +":::"+objects.get(i).day+":::"+objects.get(i).month+":::"+objects.get(i).year);
     gridcell.setTextColor(Color.parseColor("#da0078"));
    }
   }

   if (day_color[1].equals("BLUE")&& day_color[4].equals("yes"))
   {
    gridcell.setTextColor(Color.parseColor("#ffffff"));
    gridcell.setBackgroundResource(R.drawable.circle_days_fill);
   }

   if (day_color[4].equals("yes"))
   {
    gridcell.setTextColor(Color.parseColor("#ffffff"));
    gridcell.setBackgroundResource(R.drawable.circle_days_fill);
   }

   if (day_color[1].equals("BLUE")&& day_color[4].equals("no"))
   {
    gridcell.setTextColor(Color.parseColor("#ffffff"));
    gridcell.setBackgroundResource(R.drawable.circle_days_fill);
   }



   for (int i = 0; i < objects.size(); i++) 
   {
    if(Integer.parseInt(theday)==Integer.parseInt((objects.get(i).day))
      && day_color[2].equals(objects.get(i).month))
    {
     if(objects.get(i).rsvp.equals("1"))
     {
      gridcell.setTextColor(Color.parseColor("#008000"));
     }
    }
   }

   gridcell.setOnClickListener(new OnClickListener()
   {
    @Override
    public void onClick(View v) 
    {
     // TODO Auto-generated method stub
     String tag [] = list.get(position).toString().split("-");
     if(v.getTag().toString().equals("1"))
     {
      v.setTag("1");
      if(v.getId() == R.id.calendar_day_gridcell)
      {
       if (myToolTipInfoWindow == null)
       {
        addPurpleToolTipView(v);
       }
       else
       {
        myToolTipInfoWindow.remove();
        myToolTipInfoWindow = null;
       }
      }
      else
      {
      }
     }
     else if(v.getTag().toString().equals(""))
     {
      v.setTag("1");
      if(v.getId() == R.id.calendar_day_gridcell)
      {
       if (myToolTipInfoWindow == null)
       {
        addPurpleToolTipView(v);
       }
       else
       {
        myToolTipInfoWindow.remove();
        myToolTipInfoWindow = null;
       }
      }
      else
      {
      }
     }
     else
     {
      if(v.getId() == R.id.calendar_day_gridcell)
      {
       if (myToolTipInfoWindow == null)
       {
        addPurpleToolTipView(v);
       }
       else
       {
        myToolTipInfoWindow.remove();
        myToolTipInfoWindow = null;
       }
      }
      else
      {
      }
     }
     for (int i = 0; i < list.size(); i++) 
     {
      gridcell.setTextColor(R.color.purple_lite);
      gridcell.setBackgroundColor(Color.parseColor("#da0078"));
      String tags [] = list.get(i).toString().split("-");
      list.set(i,tags[0]+"-"+tags[1]+"-"+tags[2]+"-"+tags[3]+"-no");
     }
     list.set(position,tag[0]+"-"+tag[1]+"-"+tag[2]+"-"+tag[3]+"-yes");
     adapter1.notifyDataSetChanged();

    }
   });

   return row;
  }

  public int getCurrentDayOfMonth() 
  {
   return currentDayOfMonth;
  }

  private void setCurrentDayOfMonth(int currentDayOfMonth)
  {
   this.currentDayOfMonth = currentDayOfMonth;
  }

  public void setCurrentWeekDay(int currentWeekDay) 
  {
   this.currentWeekDay = currentWeekDay;
  }

  public int getCurrentWeekDay() 
  {
   return currentWeekDay;
  }
 }

screen_gridcell.xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="60dp"
    android:layout_height="50dp"
    android:background="#ffffff"
    android:orientation="vertical" >

    <Button
        android:id="@+id/calendar_day_gridcell"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:button="@drawable/calendar_button_selector"
        android:gravity="center"
        android:textSize="13sp"
        android:textStyle="bold"
        android:textColor="#FFFFFF" >
    </Button>

</RelativeLayout>

<强>截图

Calendar View with event