Android日历视图

时间:2010-09-13 17:49:22

标签: android calendarview

我对Android开发很陌生,我正在寻找一种在我的Android应用程序中包含日历的方法,但是当谷歌搜索时我的表现非常糟糕。

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

  2. 内置选项失败,是否有可以使用日历控件的好库?

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

8 个答案:

答案 0 :(得分:32)

我编写的Caldroid库(https://github.com/roomorama/Caldroid)设置简单,并具有许多功能,如设置最小/最大日期,禁用日期,选择日期范围,滑动以更改月份,完全本地化,支持正确旋转等。自定义外观很容易。只是为了分享,如果有人可能觉得它有用:)

答案 1 :(得分:9)

我尝试了android-CalendarView,Caldroid,后来改为 android-times-square ,这有以下改进:

  • 由于垂直滚动(在Caldroid中没有响应缓慢的分页),切换到其他月份的速度要快得多。
  • 指标,突出显示日期(至少在this fork for android)
  • iOS版本具有相同的外观和感觉
  • 看起来比Android版更干净,因为几个月分明了

    enter image description here

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

答案 2 :(得分:7)

AFAIK,除了实施自己的日历之外别无他法。所以...你需要做的是使用包含7列的GridLayout并创建自定义BaseAdapter来正确显示数据。

答案 3 :(得分:6)

Android现在提供了三种在您的应用中合并日历的方法。

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

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

  4. Calendar intents允许您提供日历,而无需获得额外的权限或处理数据库。

答案 4 :(得分: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);

}

快速搜索     content://com.android.calendar/calendars 将帮助您入门。但我还没完成,但我还是无法获得数据。但它有可能

答案 5 :(得分:2)

这个库看起来非常好,并且具有更现代的UI(Material Design):

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

答案 6 :(得分:1)

您可以使用我创建的Android日历选择器,它是开源项目,您可以轻松地将其添加到您的项目中。

https://github.com/sancarbar/Android-Calendar-Picker

答案 7 :(得分: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) {
            }
    });

这很简单。