我目前正在开发一个应用程序,但我坚持执行该应用程序的日历部分。现在,我正在尝试实现类似于以下的功能:
我没有在原始日历视图上找到任何功能,该功能可以让我在几天内显示事件指示器,添加渐变色而不是纯色等。 我想在我的应用程序中实现这种设计:
我尝试使用SundeepK的Compact Calendar View,但是我没有设法实现与该日历一起使用的事件适配器,由于自定义日历未使用上下文,因此在传递上下文时总是会收到错误消息。
下面的这段代码我试图实现List视图,以填充当月的事件。因此,在按月加载或滚动浏览时,将加载事件,将事件传递给适配器,并且列表视图将充满新事件。但是,无论我做什么,总是会遇到无法将android.Context转换为自定义日历Context的错误。
CalendarActivity.java
compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() {
@Override
public void onDayClick(Date dateClicked) {
List<Event> bookingsFromMap = compactCalendarView.getEvents(dateClicked);
EventListAdapter adapter = new EventListAdapter(context, bookingsFromMap);
ListView listView = (ListView) findViewById(R.id.calendar_event_list);
listView.setAdapter(adapter);
Log.d(TAG, "inside onclick " + simple_date_format.format(dateClicked));
if (bookingsFromMap != null) {
Log.d(TAG, bookingsFromMap.toString());
mutableBookings.clear();
for (Event booking : bookingsFromMap) {
mutableBookings.add((String) booking.getData());
Log.d(TAG, "Events in this day found!");
}
} else {
Log.println(Log.VERBOSE,TAG, "\n NO EVENTS FOUND \n");
}
}
EventListAdapter.java
public class EventListAdapter extends ArrayAdapter<Event> {
public EventListAdapter(Context context, List<Event> feeds) {
super(context,0,feeds);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Event feed = getItem(position);
if(convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.event_feed_item_row, parent, false);
}
TextView eventName = (TextView) convertView.findViewById(R.id.event_list_dataText);
TextView eventDay = (TextView) convertView.findViewById(R.id.event_list_dayTextView);
TextView eventMonth = (TextView) convertView.findViewById(R.id.event_list_monthTextView);
SimpleDateFormat simple_month = new SimpleDateFormat("Mmm", Locale.US);
SimpleDateFormat simple_day = new SimpleDateFormat("dd", Locale.US);
eventName.setText((String) feed.getData());
eventMonth.setText(simple_month.format(feed.getTimeInMillis()));
eventDay.setText(simple_day.format(feed.getTimeInMillis()));
return convertView;
}
}
现在从此处的屏幕截图中获取
:只有当我想使用渐变作为背景时,日历背景才能是纯色,就像所选日期是纯色一样。
任何建议将不胜感激。
答案 0 :(得分:1)
要轻松,快速地做到这一点,您只需遵循此git hub库,这是执行所需功能的很多选择。
底部将通过使用数据库在Recyler视图中创建
答案 1 :(得分:0)
我找到了一个项目,可以通过一点点修改来根据您的要求创建日历
使用此命令:Sample Project
您首先需要为日历创建渐变背景,只需将res / fraglay.xml渐变可绘制资源设置为根布局背景
您的第二个需要是通过修改drawable / selectedback.xml文件来选择日期渐变背景
您的第三个需求是底部recyclerview,如果您要根据需要修改事件名称布局,编辑布局/ view_item,则该项目已在上述项目中提供
在上述项目中,您可以通过GooglecalenderView的init方法设置事件,如果可以使用一个日期多个事件,则可以设置所需的任何事件,
答案 2 :(得分:0)
使用CompactCalendarView时,您可以将事件添加到日历中,并且单击时可以获得选定日期的事件。可以使用此代码实现..
Long miliseconds = GettingMiliSeconds(formatteddate);
Event newevent = AddEvents(miliseconds, "" + "Text You wants to add in your event ");
calendarView.addEvent(newevent);
public Event AddEvents(Long milliseconds,String Description)
{
Event event = new Event(Color.BLUE,milliseconds,""+Description);
return event;
}
public Long GettingMiliSeconds(String Date)
{
long timeInMilliseconds = 0;
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
try {
Date mDate = sdf.parse(Date);
timeInMilliseconds = mDate.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return timeInMilliseconds;
}