2010-09-13 126 views
12

我对Android开发很新颖,我正在寻找在我的Android应用程序中包含日历的方法,但是当使用Google搜索时我发现很糟糕。Android日历视图

  1. 有什么办法在我的应用程序中使用默认的日历种类的视图? (将是理想的,因为用户界面会很熟悉)

  2. 失败的内置选项,是否有任何良好的图书馆有我可以使用的日历控件?

我不希望同步和所有的(至少在这一点),只是希望有一个我可以显示信息给用户日历视图。

回答

7

AFAIK,没有其他方法比实施自己的日历。所以...你需要做的是使用带有7列的GridLayout并创建一个自定义BaseAdapter来正确显示数据。

2

这可能但并不容易。 http://jimblackler.net/blog/?p=151&cpage=2#comment-52767

private void InsertAppointment(String strTitle, String strDescription, String strEventLocation, long StartDateTime, long EndDateTime, boolean bAllDay, boolean bHasAlarm){ 
    int tAllday; 
    int tHasAlarm; 
    if (bAllDay = true){ 
     tAllday = 1; 
    } 
    else 
     tAllday = 0; 
    if (bHasAlarm = true){ 
     tHasAlarm = 1; 
    } 
    else 
     tHasAlarm = 0; 

    ContentValues event = new ContentValues(); 
    // Calendar in which you want to add Evenet 
    event.put("calendar_id", CalId);    //CalId         
    event.put("title", strTitle);               
    event.put("description", strDescription);         
    event.put("eventLocation", strEventLocation);             
    event.put("dtstart", StartDateTime);               
    event.put("dtend", EndDateTime);     
    event.put("allDay", 0);      
    event.put("hasAlarm", 0);                 
    Uri eventsUri = Uri.parse("content://com.android.calendar/events");  
    // event is added 
    getContentResolver().insert(eventsUri, event); 

} 

上 内容快速搜索://com.android.calendar/calendars 将帮助您开始。但我没有完成我的,但我只是无法获得数据了。但它是可能的

+0

您是否已成功将默认日历添加到您的应用中?请告诉我。我需要一些帮助。谢谢 – 2013-01-17 18:24:39

5

Android现在提供三种方法将日历并入您的应用程序。

  1. Calendar view用于选取日期等。

  2. Calendar provider可以访问添加和删除操作系统日历中的事件。

  3. Calendar intents允许您提供日历而不必获得额外的权限或处理数据库。

+0

不幸的是,这只适用于API11或更高版本。这将是很好,如果有人创造了一个很好的backport,所以你可以支持2.x版本 – THelper 2013-01-03 14:50:19

31

我写Caldroid库(https://github.com/roomorama/Caldroid)即简单的设置,并有许多功能,例如设置最小/最大日,禁用日期,选择日期范围,滑动即可切换月,完全本地化,支持旋转正确等。定制外观很简单。只是为了分享,如果有人可能会发现它有用:)

+0

嘿我用你的日历,它的真棒。但我需要在日期上设置事件。就像我需要根据他们在该日期的事件来定制日期颜色。你能给我一点点想法,我该如何做到这一点? – 2013-05-17 13:00:12

+0

您可以根据日期为每个单元提供自己的视图,可以在文档中找到它https://github.com/roomorama/Caldroid#allow-customized-cell-for-the-dates-gridview 您可以在样品中找到如何使用它 – thomasdao 2013-05-20 03:36:54

+0

我被困在这个问题中,你能检查一下吗? https://github.com/roomorama/Caldroid/issues/24 – 2013-06-05 11:46:12

9

我试过android-CalendarView,Caldroid后来改用android-times-square具有这种改进:

  • 快得多切换到其他月份由于垂直滚动(无分页这Caldroid响应慢)
  • 指标,突出显示日期(至少在Android的this fork
  • 的iOS版本相同的外观和感觉
  • 看起来比Android版本吸尘器,因为月是明显分开

    enter image description here

就像Caldroid它是a productive app的一部分。

+0

“指标,突出显示的日期(至少在Android的这个叉)” - 这也可以在Caldroid?我有两个想法:是选择caldroid还是这个,我需要日光浴。...谢谢。 – Filip 2016-02-08 10:31:28

1

您可以使用MFCalendarView:https://github.com/MustafaFerhan/MFCalendarView

设置多个事件;

ArrayList<String> eventDays = new ArrayList<String>(); 
eventDays.add("2014-02-25"); 
eventDays.add(Util.getCurrentDate()); 

mf.setEvents(eventDays); 

,并与MFCalendarView的监听器处理:

mf = (MFCalendarView) findViewById(R.id.mFCalendarView); 
mf.setOnCalendarViewListener(new onMFCalendarViewListener() { 

    @Override 
     public void onDisplayedMonthChanged(int month, int year, String monthStr) { 
      } 

      @Override 
      public void onDateChanged(String date) { 
      } 
    }); 

这很简单。

2

这个库似乎真的很好,有一个更现代的UI(材质设计):

https://github.com/prolificinteractive/material-calendarview

你只需要与gradle这个导入:

compile 'com.prolificinteractive:material-calendarview:1.4.0' 

而且在其添加到您布局:

<com.prolificinteractive.materialcalendarview.MaterialCalendarView 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/calendarView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
app:mcv_showOtherDates="all" 
app:mcv_selectionColor="#00F" 
/> 

enter image description here

+0

嗨菲利普我使用上面的压光view.every工作正常我需要设置日历1990年如何做到这一点?你能帮我 – 2017-01-06 06:48:05