高仿小米日历
高仿小米日歷
https://github.com/wuda615/StickyCalendar
- 高仿小米日歷
- 使用方式
- 導入
- xml添加布局
- 自定義日歷Item樣式和內容
- 使用方式
使用方式
導入
Gradle
compile 'com.github.wuda615:StickyCalendar-release:1.0.1'xml添加布局
<com.github.wuda615.calendar.widget.ClpsCalendarWrapperLayoutandroid:id="@+id/calendar"android:layout_width="match_parent"android:layout_height="match_parent"app:calendarItemId="@layout/item_calendar_demo"app:contentId="@+id/lv_bottom"><ListViewandroid:id="@+id/lv_bottom"android:layout_width="match_parent"android:layout_height="wrap_content"android:scrollbars="none" /> </com.github.wuda615.calendar.widget.ClpsCalendarWrapperLayout>將要包含的滑動控件放置在 ClpsCalendarWrapperLayout,可以是任何View,包括但不限于ListView,ScrollView,RecyclerView。
對于需要使用自定義item樣式或內容的日歷,提供app:calendarItemId 屬性自由替換對應的布局,@layout/item_calendar_demo對應的布局文件完全樣式由用戶自己定義(是否顯示農歷,當天是否紅點標識事件等),當然不設置將使用默認的樣式。
將ClpsCalendarWrapperLayout和包含的控件聯系起來app:contentId="@+id/lv_bottom",這個屬性是必須設置,否則滑動事件無法關聯。
自定義日歷Item樣式和內容
這里只是簡單的設置日歷Item樣式,當天紅色背景白色文字高亮,選中的日期有個藍色圓環高亮,周二、周五都用綠色標識當天有事件
* 1. 設置Item布局文件`item_calendar_demo.xml *
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/calendar_item"android:layout_width="wrap_content"android:layout_height="50dp"><TextView android:id="@+id/tx_date"android:layout_width="30dp"android:layout_height="30dp"android:layout_centerInParent="true"android:layout_gravity="center_horizontal"android:button="@null"android:gravity="center"android:textColor="@color/calendar_text_color"android:textSize="15sp"tools:background="@drawable/calendar_orange_solid"tools:text="18" /><ImageView android:id="@+id/imv_point"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentEnd="true"android:layout_alignParentRight="true"android:layout_gravity="center_horizontal"android:layout_margin="5dp"android:src="@drawable/calendar_marker_green" /> </RelativeLayout>包含一個用來顯示日期的TextView和一個標識事件的ImageView
* 2.Item視圖更新邏輯 *
設置setRenderItemCallBack更新回調,通過CommonViewHolder和DateBeanWrapper來判斷該如何處理自己的視圖顯示
參考本例需求代碼rendItemView(viewHolder, dateBean)
private void rendItemView(CommonViewHolder viewHolder, DateBeanWrapper dateBean) {Calendar calendar = Calendar.getInstance();calendar.setTime(dateBean.getDate());String text = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));viewHolder.setText(R.id.tx_date, text);boolean isCurrentMonth = dateBean.getMonthType() == DateBeanWrapper.MONTH_TYPE_THIS;if (DateUtils.isCheckedDay(dateBean.getDate())) {Log.d("EventCalendarAdapter", "drawCheckedDay:" + DateUtils.formatDate(dateBean.getDate()));if (DateUtils.isSameDay(dateBean.getDate(), DateUtils.getNow())) {viewHolder.setBackgroundResource(R.id.tx_date, R.drawable.calendar_item_today_bg);viewHolder.setTextColor(R.id.tx_date, ContextCompat.getColor(this, R.color.calendar_text_color_white));} else {viewHolder.setBackgroundResource(R.id.tx_date, R.drawable.calendar_item_checked_bg);viewHolder.setTextColor(R.id.tx_date, ContextCompat.getColor(this, R.color.calendar_text_color));}} else {viewHolder.setTextColor(R.id.tx_date, ContextCompat.getColor(this, isCurrentMonth ? R.color.calendar_text_color : R.color.calendar_text_color_disable));viewHolder.setBackgroundColor(R.id.tx_date, ContextCompat.getColor(this, android.R.color.transparent));}if ((dateBean.getDayOfWeek() == 2 || dateBean.getDayOfWeek() == 5) && isCurrentMonth) {viewHolder.setVisibility(R.id.imv_point, VISIBLE);} else {viewHolder.setVisibility(R.id.imv_point, GONE);}}* 3.其他功能*
設置周月模式calendar.setCalendarMode(isChecked);
跳轉到制定日期calendar.jump2Day(DateUtils.getNow());
總結
- 上一篇: java跳格子不同跳发_(算法)跳格子
- 下一篇: win10向VMware中的win7传文