Android日历方式显示的日期选择组件.docx
《Android日历方式显示的日期选择组件.docx》由会员分享,可在线阅读,更多相关《Android日历方式显示的日期选择组件.docx(18页珍藏版)》请在冰豆网上搜索。
Android日历方式显示的日期选择组件
Android日历方式显示的日期选择组件
此Widget组件只包含五个类文件:
• DateWidget
• DateWidgetDayCell
• DateWidgetDayHeader
• DayStyle
• SymbolButton
*红色为启动的activity
DateWidget.java:
Java代码
1. packagecom.iaiai;
2.
3. importjava.text.SimpleDateFormat;
4. importjava.util.ArrayList;
5. importjava.util.Calendar;
6.
7. importandroid.app.Activity;
8. importandroid.os.Bundle;
9. importandroid.view.Gravity;
10. importandroid.view.View;
11. importandroid.widget.Button;
12. importandroid.widget.LinearLayout;
13. importandroid.widget.LinearLayout.LayoutParams;
14. importandroid.widget.TextView;
15.
37. publicclassDateWidgetextendsActivity{
38. privateArrayListdays=newArrayList();
39. //privateSimpleDateFormatdateMonth=newSimpleDateFormat("MMMMyyyy");
40. privateCalendarcalStartDate=Calendar.getInstance();
41. privateCalendarcalToday=Calendar.getInstance();
42. privateCalendarcalCalendar=Calendar.getInstance();
43. privateCalendarcalSelected=Calendar.getInstance();
44. LinearLayoutlayContent=null;
45. ButtonbtnPrev=null;
46. ButtonbtnToday=null;
47. ButtonbtnNext=null;
48. privateintiFirstDayOfWeek=Calendar.MONDAY;
49. privateintiMonthViewCurrentMonth=0;
50. privateintiMonthViewCurrentYear=0;
51. publicstaticfinalintSELECT_DATE_REQUEST=111;
52. privatestaticfinalintiDayCellSize=38;
53. privatestaticfinalintiDayHeaderHeight=24;
54. privatestaticfinalintiTotalWidth=(iDayCellSize*7);
55. privateTextViewtv;
56. privateintmYear;
57. privateintmMonth;
58. privateintmDay;
59.
60. @Override
61. publicvoidonCreate(Bundleicicle){
62. super.onCreate(icicle);
63. iFirstDayOfWeek=Calendar.MONDAY;
64. mYear=calSelected.get(Calendar.YEAR);
65. mMonth=calSelected.get(Calendar.MONTH);
66. mDay=calSelected.get(Calendar.DAY_OF_MONTH);
67. setContentView(generateContentView());
68. calStartDate=getCalendarStartDate();
69. DateWidgetDayCelldaySelected=updateCalendar();
70. updateControlsState();
71. if(daySelected!
=null)
72. daySelected.requestFocus();
73. }
74.
75. @Override
76. publicvoidonStart(){
77. super.onStart();
78.
79. }
80.
81. privateLinearLayoutcreateLayout(intiOrientation){
82. LinearLayoutlay=newLinearLayout(this);
83. lay.setLayoutParams(newLayoutParams(
84. android.view.ViewGroup.LayoutParams.FILL_PARENT,
85. android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
86. lay.setOrientation(iOrientation);
87. returnlay;
88. }
89.
90. privateButtoncreateButton(StringsText,intiWidth,intiHeight){
91. Buttonbtn=newButton(this);
92. btn.setText(sText);
93. btn.setLayoutParams(newLayoutParams(iWidth,iHeight));
94. returnbtn;
95. }
96.
97. privatevoidgenerateTopButtons(LinearLayoutlayTopControls){
98. finalintiHorPadding=24;
99. finalintiSmallButtonWidth=60;
100. btnToday=createButton("",iTotalWidth-iSmallButtonWidth
101. -iSmallButtonWidth,
102. android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
103. btnToday.setPadding(iHorPadding,btnToday.getPaddingTop(),iHorPadding,
104. btnToday.getPaddingBottom());
105. btnToday.setBackgroundResource(android.R.drawable.btn_default_small);
106.
107. SymbolButtonbtnPrev=newSymbolButton(this,
108. SymbolButton.symbol.arrowLeft);
109. btnPrev.setLayoutParams(newLayoutParams(iSmallButtonWidth,
110. android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
111. btnPrev.setBackgroundResource(android.R.drawable.btn_default_small);
112.
113. SymbolButtonbtnNext=newSymbolButton(this,
114. SymbolButton.symbol.arrowRight);
115. btnNext.setLayoutParams(newLayoutParams(iSmallButtonWidth,
116. android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
117. btnNext.setBackgroundResource(android.R.drawable.btn_default_small);
118.
119. //setevents
120. btnPrev.setOnClickListener(newButton.OnClickListener(){
121. publicvoidonClick(Viewarg0){
122. setPrevViewItem();
123. }
124. });
125. btnToday.setOnClickListener(newButton.OnClickListener(){
126. publicvoidonClick(Viewarg0){
127.
128. setTodayViewItem();
129. Strings=calToday.get(Calendar.YEAR)+"/"
130. +(calToday.get(Calendar.MONTH)+1);
131. btnToday.setText(s);
132. }
133. });
134. btnNext.setOnClickListener(newButton.OnClickListener(){
135. publicvoidonClick(Viewarg0){
136. setNextViewItem();
137. }
138. });
139.
140. layTopControls.setGravity(Gravity.CENTER_HORIZONTAL);
141. layTopControls.addView(btnPrev);
142. layTopControls.addView(btnToday);
143. layTopControls.addView(btnNext);
144. }
145.
146. privateViewgenerateContentView(){
147. LinearLayoutlayMain=createLayout(LinearLayout.VERTICAL);
148. layMain.setPadding(8,8,8,8);
149. LinearLayoutlayTopControls=createLayout(LinearLayout.HORIZONTAL);
150.
151. layContent=createLayout(LinearLayout.VERTICAL);
152. layContent.setPadding(20,0,20,0);
153. generateTopButtons(layTopControls);
154. generateCalendar(layContent);
155. layMain.addView(layTopControls);
156. layMain.addView(layContent);
157.
158. tv=newTextView(this);
159. layMain.addView(tv);
160. returnlayMain;
161. }
162.
163. privateViewgenerateCalendarRow(){
164. LinearLayoutlayRow=createLayout(LinearLayout.HORIZONTAL);
165. for(intiDay=0;iDay<7;iDay++){
166. DateWidgetDayCelldayCell=newDateWidgetDayCell(this,
167. iDayCellSize,iDayCellSize);
168. dayCell.setItemClick(mOnDayCellClick);
169. days.add(dayCell);
170. layRow.addView(dayCell);
171. }
172. returnlayRow;
173. }
174.
175. privateViewgenerateCalendarHeader(){
176. LinearLayoutlayRow=createLayout(LinearLayout.HORIZONTAL);
177. for(intiDay=0;iDay<7;iDay++){
178. DateWidgetDayHeaderday=newDateWidgetDayHeader(this,
179. iDayCellSize,iDayHeaderHeight);
180. finalintiWeekDay=DayStyle.getWeekDay(iDay,iFirstDayOfWeek);
181. day.setData(iWeekDay);
182. layRow.addView(day);
183. }
184. returnlayRow;
185. }
186.
187. privatevoidgenerateCalendar(LinearLayoutlayContent){
188. layContent.addView(generateCalendarHeader());
189. days.clear();
190. for(intiRow=0;iRow<6;iRow++){
191. layContent.addView(generateCalendarRow());
192. }
193. }
194.
195. privateCalendargetCalendarStartDate(){
196. calToday.setTimeInMillis(System.currentTimeMillis());
197. calToday.setFirstDayOfWeek(iFirstDayOfWeek);
198.
199. if(calSelected.getTimeInMillis()==0){
200. calStartDate.setTimeInMillis(System.currentTimeMillis());
201. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
202. }else{
203. calStartDate.setTimeInMillis(calSelected.getTimeInMillis());
204. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek);
205. }
206.
207. UpdateStartDateForMonth();
208.
209. returncalStartDate;
210. }
211.
212. privateDateWidgetDayCellupdateCalendar(){
213. DateWidgetDayCelldaySelected=null;
214. booleanbSelected=false;
215. finalbooleanbIsSelection=(calSelected.getTimeInMillis()!
=0);
216. finalintiSelectedYear=calSelected.get(Calendar.YEAR);
217. finalintiSelectedMonth=calSelected.get(Calendar.MONTH);
218. finalintiSelectedDay=calSelected.get(Calendar.DAY_OF_MONTH);
219. calCalendar.setTimeInMillis(calStartDate.getTimeInMillis());
220. for(inti=0;i221. finalintiYear=calCalendar.get(Calendar.YEAR);
222. finalintiMonth=calCalendar.get(Calendar.MONTH);
223. finalintiDay=calCalendar.get(Calendar.DAY_OF_MONTH);
224. finalintiDayOfWeek=calCalendar.get(Calendar.DAY_OF_WEEK);
225. DateWidgetDayCelldayCell=days.get(i);
226. //checktoday
227. booleanbToday=false;
228. if(calToday.get(Calendar.YEAR)==iYear)
229. if(calToday.get(Calendar.MONTH)==iMonth)
230. if(calToday.get(Calendar.DAY_OF_MONTH)==iDay)
231. bToday=true;
232. //checkholiday
233. booleanbHoliday=false;
234. if((iDayOfWeek==Calendar.SATURDAY)
235