如何解决Applandeo CalendarView部分日期背景色填充不全问题
解决Applandeo CalendarView日期背景填充不全的问题
问题原因分析
出现空白区域通常是以下两个原因导致:
- 自定义的
calendar_selecteddrawable存在内边距,或者形状未完全覆盖日期控件的范围 - 同时调用
setEvents()和setCalendarDays()导致视图叠加,背景显示异常
解决方案
1. 修正自定义Drawable的布局
打开res/drawable/calendar_selected.xml,确保它没有额外内边距,并且形状完全适配日期控件:
<!-- 示例:圆形背景完全填充 --> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@color/greencal" /> <!-- 不要设置padding属性 --> </shape>
如果需要方形背景,将shape改为rectangle即可,同样不要添加padding属性。
2. 简化代码逻辑,避免重复设置
同时使用EventDay和CalendarDay设置背景会导致视图层叠冲突,只需保留setCalendarDays()的方式:
val calendarView: CalendarView = attendanceInquiryBinding.attendanceCalendarView val calendar = Calendar.getInstance().apply { set(Calendar.YEAR, 2024) set(Calendar.MONTH, Calendar.FEBRUARY) set(Calendar.DAY_OF_MONTH, 15) } // 直接用CalendarDay设置背景,无需EventDay val customDays = listOf( CalendarDay(calendar).apply { backgroundResource = R.drawable.calendar_selected // 如需修改文字颜色,取消注释并设置对应颜色 // labelColor = ContextCompat.getColor(context, R.color.white) } ) calendarView.setCalendarDays(customDays)
3. 额外检查:自定义日期项布局消除内边距
如果上述方法无效,可通过自定义日期项布局移除默认内边距:
在布局文件中给CalendarView添加属性:
<com.applandeo.materialcalendarview.CalendarView android:id="@+id/attendanceCalendarView" ... app:dayLayout="@layout/custom_day_layout" />
创建res/layout/custom_day_layout.xml,自定义日期项布局:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dayLabel" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:padding="0dp" android:textColor="@color/black" />
以上操作可确保背景完全填充日期区域。
内容的提问来源于stack exchange,提问作者user14696012
相关产品推荐
相关产品推荐

