2014-01-31 8 views
2

내 응용 프로그램에서 캘린더를 사용하고 있습니다. 내 응용 프로그램에서 캘린더가 성공적으로 구현되었지만 특정 날짜를 사용하거나 사용하지 않도록 설정할 수 있습니다 (예 : 모든 달 또는 모든 달에있는 월요일 & 일요일).android에서 날짜 사용 및 사용 안함

내 달력보기

import java.util.ArrayList; 
import java.util.GregorianCalendar; 
import java.util.Locale; 

import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.GridView; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.infometricx.adapter.CalendarAdapter; 
import com.infometricx.utils.CalendarUtility; 

public class CalendarView extends Activity { 

    public GregorianCalendar month, itemmonth;// calendar instances. 

    public CalendarAdapter adapter;// adapter instance 
    public Handler handler;// for grabbing some event values for showing the dot 
          // marker. 
    public ArrayList<String> items; // container to store calendar items which 
            // needs showing the event marker 
    ArrayList<String> event; 
    LinearLayout rLayout; 
    ArrayList<String> date; 
    ArrayList<String> desc; 

    Typeface MyriadPro; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.calender); 
     Locale.setDefault(Locale.US); 

     rLayout = (LinearLayout) findViewById(R.id.text); 

     MyriadPro = Typeface.createFromAsset(getAssets(), 
       "fonts/MyriadPro-Light.otf"); 

     month = (GregorianCalendar) GregorianCalendar.getInstance(); 
     itemmonth = (GregorianCalendar) month.clone(); 

     items = new ArrayList<String>(); 

     adapter = new CalendarAdapter(this, month); 

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(adapter); 

     handler = new Handler(); 
     handler.post(calendarUpdater); 

     TextView title = (TextView) findViewById(R.id.title); 
     title.setText(android.text.format.DateFormat.format("MMMM yyyy", month)); 

     title.setTypeface(MyriadPro); 

     RelativeLayout previous = (RelativeLayout) findViewById(R.id.previous); 

     previous.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       setPreviousMonth(); 
       refreshCalendar(); 
      } 
     }); 

     RelativeLayout next = (RelativeLayout) findViewById(R.id.next); 
     next.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       setNextMonth(); 
       refreshCalendar(); 

      } 
     }); 

     gridview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 
       // removing the previous view if added 
       if (((LinearLayout) rLayout).getChildCount() > 0) { 
        ((LinearLayout) rLayout).removeAllViews(); 
       } 
       desc = new ArrayList<String>(); 
       date = new ArrayList<String>(); 
       ((CalendarAdapter) parent.getAdapter()).setSelected(v); 
       String selectedGridDate = CalendarAdapter.dayString 
         .get(position); 

       Log.d("selectedGridDate", "----->" + selectedGridDate); 

       String[] separatedTime = selectedGridDate.split("-"); 
       String gridvalueString = separatedTime[2].replaceFirst("^0*", 
         "");// taking last part of date. ie; 2 from 2012-12-02. 
       int gridvalue = Integer.parseInt(gridvalueString); 
       // navigate to next or previous month on clicking offdays. 
       if ((gridvalue > 10) && (position < 8)) { 
        setPreviousMonth(); 
        refreshCalendar(); 
       } else if ((gridvalue < 7) && (position > 28)) { 
        setNextMonth(); 
        refreshCalendar(); 
       } 
       ((CalendarAdapter) parent.getAdapter()).setSelected(v); 

       for (int i = 0; i < CalendarUtility.startDates.size(); i++) { 

       } 

       for (int i = 0; i < CalendarUtility.startDates.size(); i++) { 
        if (CalendarUtility.startDates.get(i).equals(
          selectedGridDate)) { 
         desc.add(CalendarUtility.nameOfEvent.get(i)); 
        } 
       } 

       if (desc.size() > 0) { 
        for (int i = 0; i < desc.size(); i++) { 
         TextView rowTextView = new TextView(CalendarView.this); 

         // set some properties of rowTextView or something 
         rowTextView.setText("Event:" + desc.get(i)); 
         rowTextView.setTextColor(Color.BLACK); 

         // add the textview to the linearlayout 
         rLayout.addView(rowTextView); 

        } 

       } 

       desc = null; 

      } 

     }); 
    } 

    protected void setNextMonth() { 
     if (month.get(GregorianCalendar.MONTH) == month 
       .getActualMaximum(GregorianCalendar.MONTH)) { 
      month.set((month.get(GregorianCalendar.YEAR) + 1), 
        month.getActualMinimum(GregorianCalendar.MONTH), 1); 
     } else { 
      month.set(GregorianCalendar.MONTH, 
        month.get(GregorianCalendar.MONTH) + 1); 
     } 

    } 

    protected void setPreviousMonth() { 
     if (month.get(GregorianCalendar.MONTH) == month 
       .getActualMinimum(GregorianCalendar.MONTH)) { 
      month.set((month.get(GregorianCalendar.YEAR) - 1), 
        month.getActualMaximum(GregorianCalendar.MONTH), 1); 
     } else { 
      month.set(GregorianCalendar.MONTH, 
        month.get(GregorianCalendar.MONTH) - 1); 
     } 

    } 

    protected void showToast(String string) { 
     Toast.makeText(this, string, Toast.LENGTH_SHORT).show(); 

    } 

    public void refreshCalendar() { 
     TextView title = (TextView) findViewById(R.id.title); 

     adapter.refreshDays(); 
     adapter.notifyDataSetChanged(); 
     handler.post(calendarUpdater); // generate some calendar items 

     title.setText(android.text.format.DateFormat.format("MMMM yyyy", month)); 

    } 

    public Runnable calendarUpdater = new Runnable() { 

     @Override 
     public void run() { 
      items.clear(); 

      // Print dates of the current week 
      // DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 

      event = CalendarUtility.readCalendarEvent(CalendarView.this); 
      Log.d("=====Event====", event.toString()); 
      Log.d("=====Date ARRAY====", CalendarUtility.startDates.toString()); 

      for (int i = 0; i < CalendarUtility.startDates.size(); i++) { 

       itemmonth.add(GregorianCalendar.DATE, 1); 
       items.add(CalendarUtility.startDates.get(i).toString()); 
      } 
      adapter.setItems(items); 
      adapter.notifyDataSetChanged(); 
     } 
    }; 
} 

내 캘린더 어댑터

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.GregorianCalendar; 
import java.util.List; 
import java.util.Locale; 

import android.content.Context; 
import android.graphics.Color; 
import android.graphics.Typeface; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.infometricx.goappointed.R; 

public class CalendarAdapter extends BaseAdapter { 

    private Context mContext; 

    private java.util.Calendar month; 
    public GregorianCalendar pmonth; // calendar instance for previous month 
    /** 
    * calendar instance for previous month for getting complete view 
    */ 
    public GregorianCalendar pmonthmaxset; 
    private GregorianCalendar selectedDate; 
    int firstDay; 
    int maxWeeknumber; 
    int maxP; 
    int calMaxP; 
    int lastWeekDay; 
    int leftDays; 
    int mnthlength; 
    String itemvalue, curentDateString; 
    DateFormat df; 

    private ArrayList<String> items; 
    public static List<String> dayString; 
    private View previousView; 
    Typeface mMypriad; 

    public CalendarAdapter(Context c, GregorianCalendar monthCalendar) { 
     CalendarAdapter.dayString = new ArrayList<String>(); 
     Locale.setDefault(Locale.US); 

     mMypriad = Typeface.createFromAsset(c.getAssets(), 
       "fonts/MyriadPro-Light.otf"); 

     month = monthCalendar; 
     selectedDate = (GregorianCalendar) monthCalendar.clone(); 
     mContext = c; 
     month.set(GregorianCalendar.DAY_OF_MONTH, 1); 
     this.items = new ArrayList<String>(); 
     df = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 
     curentDateString = df.format(selectedDate.getTime()); 
     refreshDays(); 
    } 

    public void setItems(ArrayList<String> items) { 
     for (int i = 0; i != items.size(); i++) { 
      if (items.get(i).length() == 1) { 
       items.set(i, "0" + items.get(i)); 
      } 
     } 
     this.items = items; 
    } 

    public int getCount() { 
     return dayString.size(); 
    } 

    public Object getItem(int position) { 
     return dayString.get(position); 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new view for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     final TextView dayView; 
     if (convertView == null) { // if it's not recycled, initialize some 
            // attributes 
      LayoutInflater vi = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.calenderitem, null); 

     } 
     dayView = (TextView) v.findViewById(R.id.date); 
     // separates daystring into parts. 
     String[] separatedTime = dayString.get(position).split("-"); 
     // taking last part of date. ie; 2 from 2012-12-02 
     String gridvalue = separatedTime[2].replaceFirst("^0*", ""); 
     // checking whether the day is in current month or not. 
     if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) { 
      // setting offdays to white color. 
      dayView.setTextColor(Color.WHITE); 
      dayView.setClickable(false); 
      dayView.setFocusable(false); 
     } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) { 
      dayView.setTextColor(Color.WHITE); 
      dayView.setClickable(false); 
      dayView.setFocusable(false); 
     } else { 
      // setting curent month's days in blue color. 
      dayView.setTextColor(Color.BLACK); 
     } 

     if (dayString.get(position).equals(curentDateString)) { 
      setSelected(v); 
      previousView = v; 
     } else { 
      v.setBackgroundResource(R.drawable.list_item_background); 
     } 

     dayView.setText(gridvalue); 
     dayView.setTypeface(mMypriad); 

     // create date string for comparison 
     String date = dayString.get(position); 

     Log.d("date", "--->" + date); 

     if (date.length() == 1) { 
      date = "0" + date; 
     } 
     String monthStr = "" + (month.get(GregorianCalendar.MONTH) + 1); 
     if (monthStr.length() == 1) { 
      monthStr = "0" + monthStr; 
     } 
     return v; 
    } 

    public View setSelected(View view) { 
     if (previousView != null) { 
      previousView.setBackgroundResource(R.drawable.list_item_background); 
     } 
     previousView = view; 
     view.setBackgroundResource(R.drawable.calendar_cel_selectl); 
     return view; 
    } 

    public void refreshDays() { 
     // clear items 
     items.clear(); 
     dayString.clear(); 
     Locale.setDefault(Locale.US); 
     pmonth = (GregorianCalendar) month.clone(); 
     // month start day. ie; sun, mon, etc 
     firstDay = month.get(GregorianCalendar.DAY_OF_WEEK); 
     // finding number of weeks in current month. 
     maxWeeknumber = month.getActualMaximum(GregorianCalendar.WEEK_OF_MONTH); 
     // allocating maximum row number for the gridview. 
     mnthlength = maxWeeknumber * 7; 
     maxP = getMaxP(); // previous month maximum day 31,30.... 
     calMaxP = maxP - (firstDay - 1);// calendar offday starting 24,25 ... 
     /** 
     * Calendar instance for getting a complete gridview including the three 
     * month's (previous,current,next) dates. 
     */ 
     pmonthmaxset = (GregorianCalendar) pmonth.clone(); 
     /** 
     * setting the start date as previous month's required date. 
     */ 
     pmonthmaxset.set(GregorianCalendar.DAY_OF_MONTH, calMaxP + 1); 

     /** 
     * filling calendar gridview. 
     */ 
     for (int n = 0; n < mnthlength; n++) { 

      itemvalue = df.format(pmonthmaxset.getTime()); 
      pmonthmaxset.add(GregorianCalendar.DATE, 1); 
      dayString.add(itemvalue); 

     } 
    } 

    private int getMaxP() { 
     int maxP; 
     if (month.get(GregorianCalendar.MONTH) == month 
       .getActualMinimum(GregorianCalendar.MONTH)) { 
      pmonth.set((month.get(GregorianCalendar.YEAR) - 1), 
        month.getActualMaximum(GregorianCalendar.MONTH), 1); 
     } else { 
      pmonth.set(GregorianCalendar.MONTH, 
        month.get(GregorianCalendar.MONTH) - 1); 
     } 
     maxP = pmonth.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); 

     return maxP; 
    } 

} 

관련 방법 :

dayView = (TextView) v.findViewById(R.id.date); 
    // separates daystring into parts. 
    String[] separatedTime = dayString.get(position).split("-"); 
    // taking last part of date. ie; 2 from 2012-12-02 
    String gridvalue = separatedTime[2].replaceFirst("^0*", ""); 
    // checking whether the day is in current month or not. 
    if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) { 
     // setting offdays to white color. 
     dayView.setTextColor(Color.WHITE); 
     dayView.setClickable(false); 
     dayView.setFocusable(false); 
    } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) { 
     dayView.setTextColor(Color.WHITE); 
     dayView.setClickable(false); 
     dayView.setFocusable(false); 
    } else { 
     // setting curent month's days in blue color. 
     dayView.setTextColor(Color.BLACK); 
    } 

이 내가 달력보기

를 형성했다 나의 어댑터 클래스입니다 그 솔루션을 얻으려면 저를 도와주세요. 미리 감사드립니다.

+0

매우 복잡한 1이 코드를 보시려면 관련 방법을 넣어주세요. –

+0

관련 메소드를 친절하게 입력 해주세요. – Madhu

+0

이 작품입니까 ?? –

답변

1
dayView = (TextView) v.findViewById(R.id.date); 
     // separates daystring into parts. 
     String[] separatedTime = dayString.get(position).split("-"); 
     // taking last part of date. ie; 2 from 2012-12-02 
     String gridvalue = separatedTime[2].replaceFirst("^0*", ""); 
     // checking whether the day is in current month or not. 
     if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) { 
      // setting offdays to white color. 
      dayView.setTextColor(Color.WHITE); 
      dayView.setClickable(false); 
      dayView.setFocusable(false); 
        float alpha = 0.55f; 
      AlphaAnimation alphaUp = new AlphaAnimation(alpha, alpha); 
      alphaUp.setFillAfter(true); 
      dayView.startAnimation(alphaUp); 

     } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) { 
      dayView.setTextColor(Color.WHITE); 
      dayView.setClickable(false); 
      dayView.setFocusable(false); 
float alpha = 0.35f; 
      AlphaAnimation alphaUp = new AlphaAnimation(alpha, alpha); 
      alphaUp.setFillAfter(true); 
      dayView.startAnimation(alphaUp); 
          dayView.setClickable(false); 
     } else { 
      // setting curent month's days in blue color. 
      dayView.setTextColor(Color.BLACK); 
      float alpha = 0.75f; 
      AlphaAnimation alphaUp = new AlphaAnimation(alpha, alpha); 
      alphaUp.setFillAfter(true); 
      dayView.startAnimation(alphaUp); 
          dayView.setClickable(false); 
     } 
+0

나는 어떤 r r을 언급하지만 그 영향을주지 않는 동일한 코드를 사용 –