Android 日历打卡标记:用星形图标显示打卡成功日期
在 Android 日历上用星形图标标记打卡成功日期
想要在日历上以星型标记打卡成功的日期,你可以自定义一个星型的图标,并将其设置为日历上标记的自定义视图。以下是修改后的代码:
-
首先,在
res目录下创建一个名为drawable的文件夹,并在该文件夹中添加一个名为ic_star.xml的矢量图标文件。可以使用矢量图形编辑器创建一个星型图标,或者使用现有的图标资源。 -
在
MainActivity的onClick方法中,添加设置自定义视图的代码:
checkInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String currentDate = getCurrentDate();
String currentTime = getCurrentTime();
CheckIn checkIn = new CheckIn(currentDate, currentTime);
appDatabase.checkInDao().insert(checkIn);
Toast.makeText(MainActivity.this, '打卡成功:' + currentDate + ' ' + currentTime, Toast.LENGTH_SHORT).show();
// 在日历上显示标记
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(currentDate);
long timeInMillis = date.getTime();
calendarView.setDate(timeInMillis);
calendarView.setActivated(true);
// 设置自定义视图
calendarView.setCustomDayView(new CustomDayView(MainActivity.this));
} catch (ParseException e) {
e.printStackTrace();
}
}
});
- 创建一个名为
CustomDayView的类,继承自DayViewDecorator,用于自定义日历上的标记视图。
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;
import com.prolificinteractive.materialcalendarview.spans.DotSpan;
public class CustomDayView implements DayViewDecorator {
private final Drawable starDrawable;
public CustomDayView(Context context) {
starDrawable = context.getResources().getDrawable(R.drawable.ic_star);
}
@Override
public boolean shouldDecorate(CalendarDay day) {
// 在这里判断是否需要标记该日期
// 这里假设已经打卡的日期需要标记
String date = formatDate(day.getYear(), day.getMonth(), day.getDay());
List<CheckIn> checkIns = appDatabase.checkInDao().getAllCheckIns();
for (CheckIn checkIn : checkIns) {
if (checkIn.getDate().equals(date)) {
return true;
}
}
return false;
}
@Override
public void decorate(DayViewFacade view) {
// 设置标记视图
view.setBackgroundDrawable(starDrawable);
}
private String formatDate(int year, int month, int dayOfMonth) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(year - 1900, month, dayOfMonth);
return sdf.format(date);
}
}
请确保将CustomDayView类中的shouldDecorate方法中的判断逻辑根据你的需求进行修改。
现在,当你点击打卡按钮后,选中的日期将会在日历上以星型标记,表示已经打卡成功。
原文地址: http://www.cveoy.top/t/topic/bLzs 著作权归作者所有。请勿转载和采集!