Android 日历方式显示的日期选择组件.doc

收藏

预览图
编号:41881828    类型:共享资源    大小:67.50KB    格式:DOC    上传时间:2020-01-17 上传人:xxj14****4609 IP属地:河南
20
积分
关 键 词:
Android 日历方式显示的日期选择组件 日历 方式 显示 日期 选择 组件
资源描述:
Android 日历方式显示的日期选择组件 此Widget组件只包含五个类文件: •DateWidget •DateWidgetDayCell •DateWidgetDayHeader •DayStyle •SymbolButton *红色为启动的activity DateWidget.java: Java代码 1.package com.iaiai; 2. 3.import java.text.SimpleDateFormat; 4.import java.util.ArrayList; 5.import java.util.Calendar; 6. 7.import android.app.Activity; 8.import android.os.Bundle; 9.import android.view.Gravity; 10.import android.view.View; 11.import android.widget.Button; 12.import android.widget.LinearLayout; 13.import android.widget.LinearLayout.LayoutParams; 14.import android.widget.TextView; 15. 37.public class DateWidget extends Activity { 38. private ArrayList days = new ArrayList(); 39. // private SimpleDateFormat dateMonth = new SimpleDateFormat("MMMM yyyy"); 40. private Calendar calStartDate = Calendar.getInstance(); 41. private Calendar calToday = Calendar.getInstance(); 42. private Calendar calCalendar = Calendar.getInstance(); 43. private Calendar calSelected = Calendar.getInstance(); 44. LinearLayout layContent = null; 45. Button btnPrev = null; 46. Button btnToday = null; 47. Button btnNext = null; 48. private int iFirstDayOfWeek = Calendar.MONDAY; 49. private int iMonthViewCurrentMonth = 0; 50. private int iMonthViewCurrentYear = 0; 51. public static final int SELECT_DATE_REQUEST = 111; 52. private static final int iDayCellSize = 38; 53. private static final int iDayHeaderHeight = 24; 54. private static final int iTotalWidth = (iDayCellSize * 7); 55. private TextView tv; 56. private int mYear; 57. private int mMonth; 58. private int mDay; 59. 60. @Override 61. public void onCreate(Bundle icicle) { 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. DateWidgetDayCell daySelected = updateCalendar(); 70. updateControlsState(); 71. if (daySelected != null) 72. daySelected.requestFocus(); 73. } 74. 75. @Override 76. public void onStart() { 77. super.onStart(); 78. 79. } 80. 81. private LinearLayout createLayout(int iOrientation) { 82. LinearLayout lay = new LinearLayout(this); 83. lay.setLayoutParams(new LayoutParams( 84. android.view.ViewGroup.LayoutParams.FILL_PARENT, 85. android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 86. lay.setOrientation(iOrientation); 87. return lay; 88. } 89. 90. private Button createButton(String sText, int iWidth, int iHeight) { 91. Button btn = new Button(this); 92. btn.setText(sText); 93. btn.setLayoutParams(new LayoutParams(iWidth, iHeight)); 94. return btn; 95. } 96. 97. private void generateTopButtons(LinearLayout layTopControls) { 98. final int iHorPadding = 24; 99. final int iSmallButtonWidth = 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. SymbolButton btnPrev = new SymbolButton(this, 108. SymbolButton.symbol.arrowLeft); 109. btnPrev.setLayoutParams(new LayoutParams(iSmallButtonWidth, 110. android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 111. btnPrev.setBackgroundResource(android.R.drawable.btn_default_small); 112. 113. SymbolButton btnNext = new SymbolButton(this, 114. SymbolButton.symbol.arrowRight); 115. btnNext.setLayoutParams(new LayoutParams(iSmallButtonWidth, 116. android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 117. btnNext.setBackgroundResource(android.R.drawable.btn_default_small); 118. 119. // set events 120. btnPrev.setOnClickListener(new Button.OnClickListener() { 121. public void onClick(View arg0) { 122. setPrevViewItem(); 123. } 124. }); 125. btnToday.setOnClickListener(new Button.OnClickListener() { 126. public void onClick(View arg0) { 127. 128. setTodayViewItem(); 129. String s = calToday.get(Calendar.YEAR) + "/" 130. + (calToday.get(Calendar.MONTH) + 1); 131. btnToday.setText(s); 132. } 133. }); 134. btnNext.setOnClickListener(new Button.OnClickListener() { 135. public void onClick(View arg0) { 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. private View generateContentView() { 147. LinearLayout layMain = createLayout(LinearLayout.VERTICAL); 148. layMain.setPadding(8, 8, 8, 8); 149. LinearLayout layTopControls = 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 = new TextView(this); 159. layMain.addView(tv); 160. return layMain; 161. } 162. 163. private View generateCalendarRow() { 164. LinearLayout layRow = createLayout(LinearLayout.HORIZONTAL); 165. for (int iDay = 0; iDay < 7; iDay++) { 166. DateWidgetDayCell dayCell = new DateWidgetDayCell(this, 167. iDayCellSize, iDayCellSize); 168. dayCell.setItemClick(mOnDayCellClick); 169. days.add(dayCell); 170. layRow.addView(dayCell); 171. } 172. return layRow; 173. } 174. 175. private View generateCalendarHeader() { 176. LinearLayout layRow = createLayout(LinearLayout.HORIZONTAL); 177. for (int iDay = 0; iDay < 7; iDay++) { 178. DateWidgetDayHeader day = new DateWidgetDayHeader(this, 179. iDayCellSize, iDayHeaderHeight); 180. final int iWeekDay = DayStyle.getWeekDay(iDay, iFirstDayOfWeek); 181. day.setData(iWeekDay); 182. layRow.addView(day); 183. } 184. return layRow; 185. } 186. 187. private void generateCalendar(LinearLayout layContent) { 188. layContent.addView(generateCalendarHeader()); 189. days.clear(); 190. for (int iRow = 0; iRow < 6; iRow++) { 191. layContent.addView(generateCalendarRow()); 192. } 193. } 194. 195. private Calendar getCalendarStartDate() { 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. return calStartDate; 210. } 211. 212. private DateWidgetDayCell updateCalendar() { 213. DateWidgetDayCell daySelected = null; 214. boolean bSelected = false; 215. final boolean bIsSelection = (calSelected.getTimeInMillis() != 0); 216. final int iSelectedYear = calSelected.get(Calendar.YEAR); 217. final int iSelectedMonth = calSelected.get(Calendar.MONTH); 218. final int iSelectedDay = calSelected.get(Calendar.DAY_OF_MONTH); 219. calCalendar.setTimeInMillis(calStartDate.getTimeInMillis()); 220. for (int i = 0; i < days.size(); i++) { 221. final int iYear = calCalendar.get(Calendar.YEAR); 222. final int iMonth = calCalendar.get(Calendar.MONTH); 223. final int iDay = calCalendar.get(Calendar.DAY_OF_MONTH); 224. final int iDayOfWeek = calCalendar.get(Calendar.DAY_OF_WEEK); 225. DateWidgetDayCell dayCell = days.get(i); 226. // check today 227. boolean bToday = 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. // check holiday 233. boolean bHoliday = false; 234. if ((iDayOfWeek == Calendar.SATURDAY) 235. || (iDayOfWeek == Calendar.SUNDAY)) 236. bHoliday = true; 237. if ((iMonth == Calendar.JANUARY) && (iDay == 1)) 238. bHoliday = true; 239. 240. dayCell.setData(iYear, iMonth, iDay, bToday, bHoliday, 241. iMonthViewCurrentMonth); 242. bSelected = false; 243. if (bIsSelection) 244. if ((iSelectedDay == iDay) && (iSelectedMonth == iMonth) 245. && (iSelectedYear == iYear)) { 246. bSelected = true; 247. } 248. dayCell.setSelected(bSelected); 249. if (bSelected) 250. daySelected = dayCell; 251. calCalendar.add(Calendar.DAY_OF_MONTH, 1); 252. } 253. layContent.invalidate(); 254. return daySelected; 255. } 256. 257. private void UpdateStartDateForMonth() { 258. iMonthViewCurrentMonth = calStartDate.get(Calendar.MONTH); 259. iMonthViewCurrentYear = calStartDate.get(Calendar.YEAR); 260. calStartDate.set(Calendar.DAY_OF_MONTH, 1); 261. UpdateCurrentMonthDisplay(); 262. // update days for week 263. int iDay = 0; 264. int iStartDay = iFirstDayOfWeek; 265. if (iStartDay == Calendar.MONDAY) { 266. iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.MONDAY; 267. if (iDay < 0) 268. iDay = 6; 269. } 270. if (iStartDay == Calendar.SUNDAY) { 271. iDay = calStartDate.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY; 272. if (iDay < 0) 273. iDay = 6; 274. } 275. calStartDate.add(Calendar.DAY_OF_WEEK, -iDay); 276. } 277. 278. private void UpdateCurrentMonthDisplay() { 279. String s = calCalendar.get(Calendar.YEAR) + "/" 280. + (calCalendar.get(Calendar.MONTH) + 1);// dateMonth.format(calCalendar.getTime()); 281. btnToday.setText(s); 282. mYear = calCalendar.get(Calendar.YEAR); 283. } 284. 285. private void setPrevViewItem() { 286. iMonthViewCurrentMonth--; 287. if (iMonthViewCurrentMonth == -1) { 288. iMonthViewCurrentMonth = 11; 289. iMonthViewCurrentYear--; 290. } 291. calStartDate.set(Calendar.DAY_OF_MONTH, 1); 292. calStartDate.set(Calendar.MONTH, iMonthViewCurrentMonth); 293. calStartDate.set(Calendar.YEAR, iMonthViewCurrentYear); 294. UpdateStartDateForMonth(); 295. updateCalendar(); 296. 297. } 298. 299. private void setTodayViewItem() { 300. calToday.setTimeInMillis(System.currentTimeMillis()); 301. calToday.setFirstDayOfWeek(iFirstDayOfWeek); 302. calStartDate.setTimeInMillis(calToday.getTimeInMillis()); 303. calStartDate.setFirstDayOfWeek(iFirstDayOfWeek); 304. UpdateStartDateForMonth(); 305. updateCalendar(); 306. } 307. 308. private void setNextViewItem() { 309. iMonthViewCurrentMonth++; 310. if (iMonthViewCurrentMonth == 12) { 311. iMonthViewCurrentMonth = 0; 312. iMonthViewCurrentYear++; 313. } 314. calStartDate.set(Calendar.DAY_OF_MONTH, 1); 315. calStartDate.set(Calendar.MONTH, iMonthViewCurrentMonth); 316. calStartDate.set(Calendar.YEAR, iMonthViewCurrentYear); 317. UpdateStartDateForMonth(); 318. updateCalendar(); 319. 320. } 321. 322. private DateWidgetDayCell.OnItemClick mOnDayCellClick = new DateWidgetDayCell.OnItemClick() { 323. public void OnClick(DateWidgetDayCell item) { 324. calSelected.setTimeInMillis(item.getDate().getTimeInMillis()); 325. item.setSelected(true); 326. updateCalendar(); 327. updateControlsState(); 328. } 329. }; 330. 331. private void updateControlsState() { 332. SimpleDateFormat dateFull = new SimpleDateFormat("d MMMM yyyy"); 333. mYear = calSelected.get(Calendar.YEAR); 334. mMonth = calSelected.get(Calendar.MONTH); 335. mDay = calSelected.get(Calendar.DAY_OF_MONTH); 336. tv.setText(new StringBuilder().append(mYear).append("/") 337. .append(format(mMonth + 1)).append("/").append(format(mDay)) 338. .append("-----").append(dateFull.format(calSelected.getTime()))); 339. } 340. 341. private String format(int x) { 342. String s = "" + x; 343. if (s.length() == 1) 344. s = "0" + s; 345. return s; 346. } 347. 348.} DateWidgetDayCell.java: Java代码 1.package com.iaiai; 2. 3.import java.util.Calendar; 4. 5.import android.content.Context; 6.import android.graphics.Canvas; 7.import android.graphics.LinearGradient; 8.import android.graphics.Paint; 9.import android.graphics.Rect; 10.import android.graphics.RectF; 11.import android.graphics.Shader; 12.import android.view.KeyEvent; 13.import android.view.MotionEvent; 14.import android.view.View; 15.import android.view.animation.AlphaAnimation; 16.import android.widget.LinearLayout.LayoutParams; 17. 39.public class DateWidgetDayCell extends View { 40. // types 41. public interface OnItemClick { 42. public void OnClick(DateWidgetDayCell item); 43. } 44. 45. public static int ANIM_ALPHA_DURATION = 100; 46. // fields 47. private final static float fTextSize = 22; 48. private final static int iMargin = 1; 49. private final static int iAlphaInactiveMonth = 0x88; 50. 51. // fields 52. private int iDateYear = 0; 53. private int iDateMonth = 0; 54. private int iDateDay = 0; 55. 56. // fields 57. private OnItemClick itemClick = null; 58. private Paint pt = new Paint(); 59. private RectF rect = new RectF(); 60. private String sDate = ""; 61. 62. // fields 63. private boolean bSelected = false; 64. private boolean bIsActiveMonth = false; 65. private boolean bToday = false; 66. private boolean bHoliday = false; 67. private boolean bTouchedDown = false; 68. 69. // methods 70. public DateWidgetDayCell(Context context, int iWidth, int iHeight) { 71. super(context); 72. setFocusable(true); 73. setLayoutParams(new LayoutParams(iWidth, iHeight)); 74. } 75. 76. public boolean getSelected() { 77. return this.bSelected; 78. } 79. 80. @Override 81. public void setSelected(boolean bEnable) { 82. if (this.bSelected != bEnable) { 83. this.bSelected = bEnable; 84. this.invalidate(); 85. } 86. } 87. 88. public void setData(int iYear, int iMonth, int iDay, boolean bToday, 89. boolean bHoliday, int iActiveMonth) { 90. iDateYear = iYear; 91. iDateMonth = iMonth; 92. iDateDay = iDay; 93. 94. this.sDate = Integer.toString(iDateDay); 95. this.bIsActiveMonth = (iDateMonth == iActiveMonth); 96. this.bToday = bToday; 97. this.bHoliday = bHoliday; 98. } 99. 100. public void setItemClick(OnItemClick itemClick) { 101. this.itemClick = itemClick; 102. } 103. 104. private int getTextHeight() { 105. return (int) (-pt.ascent() + pt.descent()); 106. } 107. 108. @Override 109. public boolean onKeyDown(int keyCode, KeyEvent event) { 110. boolean bResult = super.onKeyDown(keyCode, event); 111. if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) 112. || (keyCode == KeyEvent.KEYCODE_ENTER)) { 113. doItemClick(); 114. } 115. return bResult; 116. } 117. 118. @Override 119. public boolean onKeyUp(int keyCode, KeyEvent event) { 120. boolean bResult = super.onKeyUp(keyCode, event); 121. return bResult; 122. } 123. 124. public void doItemClick() { 125. if (itemClick != null) 126. itemClick.OnClick(this); 127. } 128. 129. @Override 130. protected void onFocusChanged(boolean gainFocus, int direction, 131. Rect previouslyFocusedRect) { 132. super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); 133. invalidate(); 134. } 135. 136. public Calendar getDate() { 137. Calendar calDate = Calendar.getInstance(); 138. calDate.clear(); 139. calDate.set(Calendar.YEAR, iDateYear); 140. calDate.set(Calendar.MONTH, iDateMonth); 141. calDate.set(Calendar.DAY_OF_MONTH, iDateDay); 142. return calDate; 143. } 144. 145. @Override 146. protected void onDraw(Canvas canvas) { 147. super.onDraw(canvas); 148. 149. // init rectangles 150. rect.set(0, 0, this.getWidth(), this.getHeight()); 151. rect.inset(1, 1); 152. 153. // drawing 154. final boolean bFocused = IsViewFocused(); 155. 156. drawDayView(canvas, bFocused); 157. drawDayNumber(canvas, bFocused); 158. } 159. 160. private void drawDayView(Canvas canvas, boolean bFocused) { 161. if (bSelected || bFocused) { 162. LinearGradient lGradBkg = null; 163. 164. i
内容简介:
-
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:Android 日历方式显示的日期选择组件.doc
链接地址:https://www.renrendoc.com/p-41881828.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!