安卓日历视图

12

我对Android开发还比较新,正在寻找一种在我的Android应用程序中包含日历的方法,在谷歌上搜索时遇到了很多问题。

  1. 有没有办法在我的应用程序中使用默认的日历视图?(理想情况下,因为用户界面会更加熟悉)

  2. 如果没有内置选项,是否有任何好的库具有可以使用的日历控件?

我不想要同步等功能(至少目前不需要),只是想要一个可以向用户显示信息的日历视图。

8个回答

32

我写了Caldroid库 (https://github.com/roomorama/Caldroid),它易于设置并具有许多功能,例如设置最小/最大日期、禁用日期、选择日期范围、滑动以更改月份、完全本地化、支持正确旋转等。它易于自定义外观和感觉。只是分享一下,如果有人可能会发现它有用 :)


是的,我回复了您的问题。 - thomasdao
4
谢谢你的好评! - Tofeeq Ahmad
@VikasGupta 你能告诉我如何获取所有事件并在caldroid上显示吗? - Cyph3rCod3r
先生,如何使用Caldroid制作单行(周视图)日历? - Viks
请您能否检查一下这个问题 - https://github.com/roomorama/Caldroid/issues/280 - A J
显示剩余5条评论

9
我尝试了android-CalendarView、Caldroid,后来切换到android-times-square,它有以下改进:
  • 由于垂直滚动(Caldroid中响应缓慢的分页)而更快地切换到其他月份
  • 指示器,突出显示日期(至少在this fork for android中)
  • iOS版本与相同的外观和感觉
  • 看起来比Android版本更清洁,因为月份明确分开

    enter image description here

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

指标,突出显示的日期(至少在这个 Android 分支中)- Caldroid 中是否也可能实现?我犹豫不决是选择 Caldroid 还是这个,我需要突出显示日期...谢谢。 - Filip

7
据我所知,除了实现自己的日历之外,没有其他方法。因此,您需要使用具有7列的GridLayout并创建自定义BaseAdapter以正确显示数据。

6

现在,Android提供了三种方法来将日历集成到你的应用中。

  1. 日历视图用于选择日期等操作。

  2. 日历供应程序可以访问以添加和删除事件到操作系统的日历中。

  3. 日历意图允许你提供一个日历而不需要获取额外的权限或处理数据库。


不幸的是,这只适用于API11或更高版本。如果有人创建一个良好的后移版本,以便支持2.x版本,那将是很好的。 - THelper

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 将帮助您入门。但我还没有完成我的工作,我还无法获取数据。不过这是可能的。

你成功地将默认日历添加到你的应用程序中了吗?请告诉我。我需要一些帮助。谢谢。 - Adil Malik

2

这个库看起来非常不错,界面也更现代化(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


嗨,Philippe,我正在使用上面的日历视图。一切都很好,但我需要将日历年份设置为1990年,该怎么做?你能帮我吗? - Vinodh Kumar

1

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) {
            }
    });

这非常简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接