Open 15239545925 opened 2 years ago
@15239545925
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
implementation 'com.github.gzu-liyujiang.AndroidPicker:CalendarPicker:4.1.6'
可以了,非常感谢。README上没有明确指明版本号。我加的2.0.0.多谢
@liyujiang-gzu 您好。请问日历选择器的大小在哪里设置的
@liyujiang-gzu 您好。请问日历选择器的大小在哪里设置的
指的是高度吗?picker.setHeight(...)
好的。多谢。如果说把它当成一个控件放到一个固定的位置上显示出来。不是以弹出框的形式覆盖页面上。这样可以实现吗。因为需求是放在一个固定的位置。想问一下可以不可以
好的。多谢。如果说把它当成一个控件放到一个固定的位置上显示出来。不是以弹出框的形式覆盖页面上。这样可以实现吗。因为需求是放在一个固定的位置。想问一下可以不可以
@15239545925 可以,参见自带的demo:
<com.github.gzuliyujiang.calendarpicker.core.CalendarView
android:id="@+id/calendar_picker_body"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp" />
CalendarView calendarView = findViewById(R.id.calendar_picker_body);
Date minDate = new Date(System.currentTimeMillis() - 5 * android.text.format.DateUtils.DAY_IN_MILLIS);
Calendar calendar = DateUtils.calendar(minDate);
calendar.add(Calendar.MONTH, 3);
Date maxDate = calendar.getTime();
calendarView.getAdapter()
.notify(false)
.single(false)
.festivalProvider(new MyFestivalProvider())
.valid(minDate, maxDate)
//.intervalNotes("开始", "结束")
.select(minDate.getTime(), minDate.getTime() + 5 * android.text.format.DateUtils.DAY_IN_MILLIS)
.range(minDate, maxDate)
.refresh();
您好楼主,感谢您的回答。我现在改为固定位置后:calendar.add(Calendar.MONTH, 12);这一行代码我更换为12显示12个月份,但是是往前显示的,21年12月份-22年1月份-22年2月份以此类推。 可以不可以更改为往后显示的:21年12月份-21年11月份-21年10月份 CalendarView calendarView = findViewById(R.id.calendar_picker_body); Date minDate = new Date(System.currentTimeMillis() - 5 android.text.format.DateUtils.DAY_IN_MILLIS); Calendar calendar = DateUtils.calendar(minDate); calendar.add(Calendar.MONTH, 12); Date maxDate = calendar.getTime(); calendarView.getAdapter() .notify(false) .single(false) .festivalProvider(new MyFestivalProvider()) .valid(minDate, maxDate) //.intervalNotes("开始", "结束") .select(minDate.getTime(), minDate.getTime() + 5 android.text.format.DateUtils.DAY_IN_MILLIS) .range(minDate, maxDate) .refresh();
还有一个问题是固定位置选择时间后怎么拿到选择的日期。感谢楼主
calendar.add(Calendar.MONTH, 12);这一行代码我更换为-12的话显示的全是灰色的,没办法选中
calendar.add(Calendar.MONTH, 12);这一行代码我更换为-12的话显示的全是灰色的,没办法选中
通过设置监听器setOnCalendarSelectedListener
获取选择的日期。
关键是.valid(minDate, maxDate).range(minDate, maxDate).select(startDate, endDate)
,设置了有效的范围、可选范围及已选择的范围,自己设置minDate,和maxDate,Calendar只是用来辅助计算minDate,和maxDate的。
请问这个监听器是怎么设置的,通过哪个对象设置setOnCalendarSelectedListener CalendarView calendarView = findViewById(R.id.calendar_picker_body); Date minDate = new Date(System.currentTimeMillis() - 5 android.text.format.DateUtils.DAY_IN_MILLIS); Calendar calendar = DateUtils.calendar(minDate); calendar.add(Calendar.MONTH, 6); Date maxDate = calendar.getTime(); Log.d("aaa", "minDate: " + minDate); Log.d("aaa", "maxDate: " + maxDate); calendarView.getAdapter() .notify(false) .single(false) .festivalProvider(new MyFestivalProvider()) .valid(minDate, maxDate) .intervalNotes("开始", "结束") .select(minDate.getTime(), minDate.getTime() + 5 android.text.format.DateUtils.DAY_IN_MILLIS) .range(minDate, maxDate) .refresh(); calendarView.setOnCalendarSelectedListener
您好楼主,时间我改为和弹窗样式的写法了,这样写可以获取之前的日期。但是默认打开是第一个月的。可以做到默认打开是当前月份嘛 Date currentDate = new Date(System.currentTimeMillis()); Calendar minCalendar = DateUtils.calendar(currentDate); minCalendar.add(Calendar.MONTH, -6); minCalendar.set(Calendar.DAY_OF_MONTH, DateUtils.maxDaysOfMonth(minCalendar.getTime())); Date minDate = minCalendar.getTime(); Calendar maxCalendar = DateUtils.calendar(currentDate); maxCalendar.setTime(currentDate); maxCalendar.add(Calendar.MONTH, 1); maxCalendar.set(Calendar.DAY_OF_MONTH, DateUtils.maxDaysOfMonth(maxCalendar.getTime())); Date maxDate = maxCalendar.getTime();
您好楼主,时间我改为和弹窗样式的写法了,这样写可以获取之前的日期。但是默认打开是第一个月的。可以做到默认打开是当前月份嘛 Date currentDate = new Date(System.currentTimeMillis()); Calendar minCalendar = DateUtils.calendar(currentDate); minCalendar.add(Calendar.MONTH, -6); minCalendar.set(Calendar.DAY_OF_MONTH, DateUtils.maxDaysOfMonth(minCalendar.getTime())); Date minDate = minCalendar.getTime(); Calendar maxCalendar = DateUtils.calendar(currentDate); maxCalendar.setTime(currentDate); maxCalendar.add(Calendar.MONTH, 1); maxCalendar.set(Calendar.DAY_OF_MONTH, DateUtils.maxDaysOfMonth(maxCalendar.getTime())); Date maxDate = maxCalendar.getTime();
可以做到默认打开是当前月份的,参考CalebndarPicker
的源码,关键代码:
private void scrollToSelectedPosition() {
calendarView.post(new Runnable() {
@Override
public void run() {
int position = calendarAdapter.getDatePosition(startDate);
position = Math.max(position, 0);
position = Math.min(position, calendarAdapter.getItemCount() - 1);
calendarView.getLayoutManager().scrollToPositionWithOffset(position, 0);
}
});
}
请问这个监听器是怎么设置的,通过哪个对象设置setOnCalendarSelectedListener CalendarView calendarView = findViewById(R.id.calendar_picker_body); Date minDate = new Date(System.currentTimeMillis() - 5 android.text.format.DateUtils.DAY_IN_MILLIS); Calendar calendar = DateUtils.calendar(minDate); calendar.add(Calendar.MONTH, 6); Date maxDate = calendar.getTime(); Log.d("aaa", "minDate: " + minDate); Log.d("aaa", "maxDate: " + maxDate); calendarView.getAdapter() .notify(false) .single(false) .festivalProvider(new MyFestivalProvider()) .valid(minDate, maxDate) .intervalNotes("开始", "结束") .select(minDate.getTime(), minDate.getTime() + 5 android.text.format.DateUtils.DAY_IN_MILLIS) .range(minDate, maxDate) .refresh(); calendarView.setOnCalendarSelectedListener
calendarAdapter.setOnCalendarSelectedListener(
我看README里的,我只需要用日历选择器。只在根目录gradle添加了一行代码和app的gradl里面引入了日历选择器的依赖。可是一点效果都没有。请问你们是怎么引入的