[Android教程] Android系统自定义实现日历控件

  1. 注:此功能在在Activity中,由三大块组成:头(上月按扭,下月按扭,当前年月文本),日历块(星期区域,日期区域),描述区域
  2. Activity:
  3. /**
  4. * Android实现日历控件
  5. * 注:Calendar时间与现在实的时间在月份上需要+1,因为月份是0-11
  6. */
  7. public class CalenderActivity extends Activity {
  8. http://m.nvzi91.cn/gongjingmilan/29426.html
  9. private ArrayList<DateWidgetDayView> days = new ArrayList<DateWidgetDayView>();
  10. //颜色代码常量
  11. public static int Calendar_WeekBgColor = 0;
  12. public static int Calendar_DayBgColor = 0;
  13. public static int IsHoliday_BgColor = 0;
  14. public static int UnPresentMonth_FontColor = 0;
  15. public static int IsPresentMonth_FontColor = 0;
  16. public static int IsToday_BgColor = 0;
  17. public static int Special_Reminder = 0;
  18. public static int Common_Reminder = 0;
  19. public static int Calendar_WeekFontColor = 0;
  20. /**
  21. * 表格中的第一天,一般上月的某一天
  22. */
  23. public static Calendar mFirstDateOfPanel = Calendar.getInstance();
  24. private Calendar mTodayDate = Calendar.getInstance();// 初始日期,即当天
  25. private Calendar mSelectedDate = Calendar.getInstance();//选中的日期,如果未选中则为1970-1-1
  26. private Calendar mViewDate = Calendar.getInstance();
  27. // 当前操作日期
  28. private int firstDayOfWeek = Calendar.SUNDAY;// 是星期日
  29. private int currentMonth = 0;
  30. private int currentYear = 0;
  31. private int displayWidth = 0;// 屏幕总宽度
  32. private int cell_Width = 0; // 日期单元格宽度
  33. private int cell_Height = 35; // 日期单元格高度
  34. // 页面控件
  35. TextView currentYAndM = null;
  36. Button preMonthButton = null;
  37. Button nextMonthButton = null;
  38. LinearLayout mainLayout = null;
  39. LinearLayout calendarLayout = null;
  40. LinearLayout contentLayout = null;
  41. TextView contentText = null;
  42. // 数据源
  43. Boolean[] msgs = null;
  44. Calendar startDate = null;//表格的第一天的日期
  45. @Override
  46. public void onCreate(Bundle savedInstanceState) {
  47. super.onCreate(savedInstanceState);
  48. setContentView(R.layout.calendar_main);
  49. this.viewModel = new BlogViewModel(this);
  50. // 获得屏幕宽和高,并計算出屏幕寬度分七等份的大小
  51. WindowManager windowManager = getWindowManager();
  52. Display display = windowManager.getDefaultDisplay();
  53. displayWidth = display.getWidth();
  54. cell_Width = displayWidth / 7 + 1;
  55. // 制定布局文件,并设置属性
  56. mainLayout = (LinearLayout) this.findViewById(R.id.date_calender_framelayout);
  57. currentYAndM = (TextView) findViewById(R.id.Top_Date);
  58. preMonthButton = (Button) findViewById(R.id.btn_pre_month);
  59. nextMonthButton = (Button) findViewById(R.id.btn_next_month);
  60. preMonthButton.setOnClickListener(new OnClickPreMonthListener());
  61. nextMonthButton.setOnClickListener(new OnClickNextMonthListener());
  62. // 计算本月日历中的第一天(一般是上月的某天),并更新日历
  63. mFirstDateOfPanel = getCalendarStartDate();
  64. this.mTodayDate = getTodayDate();
  65. this.startDate = getStartDate();
  66. /*
  67. * 初始化日期视图
  68. * Calendar部分
  69. */
  70. View calendarView = generateCalendarView();
  71. this.mainLayout.addView(calendarView);
  72. //刷新日期视图
  73. this.refreshCalendar();
  74. /*
  75. * Description 部分
  76. */
  77. ScrollView view = new ScrollView(this);
  78. contentLayout = createLayout(LinearLayout.VERTICAL);
  79. contentLayout.setPadding(5, 2, 0, 0);
  80. contentText = new TextView(this);
  81. contentText.setTextColor(Color.BLACK);
  82. contentText.setTextSize(18);
  83. contentLayout.addView(contentText);
  84. LinearLayout.LayoutParams Param1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
  85. view.addView(contentLayout, Param1);
  86. mainLayout.setBackgroundColor(Color.WHITE);
  87. mainLayout.addView(view);
  88. /* 新建线程
  89. new Thread() {
  90. @Override
  91. public void run() {
  92. int day = getIndexFromDates(mTodayDate, startDate);
  93. Log.i("sys", "初始时 day = "+day);
  94. }
  95. }.start();*/
  96. Calendar_WeekBgColor = this.getResources().getColor(R.color.Calendar_WeekBgColor);
  97. Calendar_DayBgColor = this.getResources().getColor(R.color.Calendar_DayBgColor);
  98. IsHoliday_BgColor = this.getResources().getColor(R.color.isHoliday_BgColor);
  99. UnPresentMonth_FontColor = this.getResources().getColor(R.color.unPresentMonth_FontColor);
  100. IsPresentMonth_FontColor = this.getResources().getColor(R.color.isPresentMonth_FontColor);
  101. IsToday_BgColor = this.getResources().getColor(R.color.isToday_BgColor);
  102. Special_Reminder = this.getResources().getColor(R.color.specialReminder);
  103. Common_Reminder = this.getResources().getColor(R.color.commonReminder);
  104. Calendar_WeekFontColor = this.getResources().getColor(R.color.Calendar_WeekFontColor);
  105. }
  106. protected String getDateShortString(Calendar date) {
  107. String returnString = date.get(Calendar.YEAR) + "-";
  108. returnString += date.get(Calendar.MONTH) + 1 + "-";
  109. returnString += date.get(Calendar.DAY_OF_MONTH);
  110. return returnString;
  111. }
  112. /**
  113. * Return the Date's index of {[url=home.php?mod=space&uid=17823]@LINK[/url] returnDate} from {@link datesList};
  114. * First is Today's index
  115. *
  116. * @param now
  117. * today
  118. * @param returnDate
  119. * click date
  120. * @return
  121. */http://m.nvzi91.cn/gongjingfeida/29428.html
  122. private int getIndexFromDates(Calendar now, Calendar returnDate) {
  123. Calendar cNow = (Calendar) now.clone();
  124. Calendar cReturnDate = (Calendar) returnDate.clone();
  125. CalenderUtil.setTimeToMidnight(cNow);
  126. CalenderUtil.setTimeToMidnight(cReturnDate);
  127. long todayMs = cNow.getTimeInMillis();
  128. long returnMs = cReturnDate.getTimeInMillis();
  129. long intervalMs = todayMs - returnMs;
  130. int index = CalenderUtil.millisecondsToDays(intervalMs);
  131. Log.i("sys", "Index = " + index);
  132. return index;
  133. }
  134. /**
  135. * 生成日期视图 即初始化calendarLayout
  136. *
  137. * @return
  138. */
  139. private View generateCalendarView() {
  140. calendarLayout = createLayout(LinearLayout.VERTICAL);
  141. // layContent.setPadding(1, 0, 1, 0);
  142. calendarLayout.setBackgroundColor(Color.argb(255, 105, 105, 103));
  143. calendarLayout.addView(generateCalendarWeekRows());
  144. days.clear();
  145. for (int iRow = 0; iRow < 6; iRow++) {
  146. calendarLayout.addView(generateCalendarDayRows());
  147. }
  148. return calendarLayout;
  149. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio提供了很多可用于开发日历控件的库和组件。以下是一些常用的日历控件库: 1. CalendarView:这是一个标准的Android库,它提供了一个日历视图,可以选择特定的日期。 2. MaterialCalendarView:这是一个Material Design库,提供了更具有吸引力的日历视图,并支持多种日期选择模式。 3. CompactCalendarView:这是一个轻量级的日历控件库,可以在应用程序中嵌入一个简单的、可自定义日历视图。 4. HorizontalCalendarView:这是一个水平滚动的日历控件库,可以在应用程序中添加一个可滚动的、可定制的日历视图。 以上这些库都可以通过在Android Studio中添加相关的依赖项来使用。要使用这些库,你可以在build.gradle文件中添加相关的依赖项,然后在你的代码中实例化并使用这些库提供的视图。 ### 回答2: Android Studio日历控件是一种用于在Android应用程序中显示和管理日期的工具。它提供了一个用户界面,可以让用户选择日期、查看月历和日历,并在界面中显示选定的日期。 在使用日历控件时,我们可以自定义各种属性,如选择器颜色、年份文字颜色、月份文字颜色、日期文字颜色、单元格背景色等等。我们也可以设置日历控件的默认日期、最小和最大日期、可用日期区间等等。 我们可以通过xml文件或编程方式来使用日历控件。通过代码编程的方法,我们需要创建一个CalendarView对象,并为其设置各种属性和监听器。而通过xml文件来使用日历控件,则需要在xml文件中添加CalendarView标签,并设置各种属性和监听器。 除此之外,我们还可以为日历控件设置多种监听器,如日期改变监听器、长按日期监听器、选择日期监听器等等,从而可以灵活地处理各种事件。 总之,Android Studio日历控件Android应用程序中不可或缺的工具之一,它可以为用户提供方便的日期选择和管理功能,同时也为开发人员提供灵活的定制和监听选项。 ### 回答3: Android Studio是一个主要为Android开发者提供的一个开发环境。而日历控件Android Studio中非常常见的一个控件。 在Android Studio中,日历控件可以通过使用DatePicker和CalendarView控件实现。DatePicker控件可以方便地让用户选择日期,而CalendarView控件则可以让用户在一个日历视图中查看特定日期的详细信息。 要使用DatePicker控件,需要在xml布局文件中添加DatePicker控件并设置监听事件。监听器可以获取用户选择的日期,并将其用于后续处理。例如,可以将选择的日期在应用中保存下来展示给用户,或将其发送给后端进行相关处理。 要使用CalendarView控件,也需要在xml布局文件中添加CalendarView控件并设置监听事件。通过监听器获取到用户选择的日期,我们可以进一步进行处理。例如,可以根据某一天的详细信息来显示当天的具体行程或计划,并帮助用户更好地管理他们的时间。 在Android Studio中使用日历控件可以帮助开发人员以一种易于理解的方式展示日期和时间,并且为用户提供给管理时间的有效工具。随着几乎所有应用都需要一些形式的日期和时间管理,日历控件Android Studio中的一个关键组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值