12

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

  1. 有没有办法在我的应用程序中使用默认的日历类型的视图?(这将是理想的,因为 UI 会很熟悉)

  2. 在内置选项失败时,是否有任何带有日历控件的好的库可供我使用?

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

4

8 回答 8

32

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

于 2013-03-08T14:41:58.337 回答
9

我尝试了 android-CalendarView, Caldroid ,后来切换到具有以下改进的 android-times-square :

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

    在此处输入图像描述

就像 Caldroid 一样,它是高效应用程序的一部分。

于 2014-01-23T15:30:33.380 回答
7

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

于 2010-09-13T18:12:51.763 回答
6

Android 现在提供了三种将日历合并到应用程序中的方法。

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

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

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

于 2012-06-22T13:54:57.413 回答
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 将帮助您入门。但我还没有完成我的工作,我还不能把数据拿出来。但有可能

于 2011-11-29T23:16:42.437 回答
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"
/>

在此处输入图像描述

于 2015-05-17T01:28:55.907 回答
1

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

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

于 2013-03-31T09:29:08.353 回答
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) {
            }
    });

这很简单。

于 2014-02-20T09:06:06.637 回答