之前看到Square发布了一个在Android上选择日期的widget,觉得挺不错的就想着把这个小项目移植到Mono for Android上。经过一段时间的开发,算完工了。代码库放在了GitHub上。
用法
将CalendarPickerView作为custom view嵌入到layout里,像这样:
<monodroid.timessquare.CalendarPickerView android:id="@+id/calendar_view" android:layout_width="match_parent" android:layout_height="match_parent" />
对于layout还想多说几句。因为这个控件占用比较多的控件,所以最好给足空间。在屏幕小的设备上最好用对话框、全屏的fragment或者单独一个activity。屏幕够大的话倒是不推荐全屏显示,用一个fragment或者对话框就行了。
接着在activity/dialog里的 OnCreate
方法中或者fragment里的OnCreateView
方法中,需要用一段有效的日期和当前选择的日期来实例化这个控件。比如像这样:
using Java.Util; ... var nextYear = Calendar.Instance; nextYear.Add (CalendarField.Year, 1); var calendar = FindViewById (Resource.Id.calendar_view); calendar.Init (new Date (), new Date (), nextYear.Time);
然后就可以用calendar.SelectedDate来得到所选择的日期。
实现细节
Square当时是如何想到写android-times-square这个小项目的可以看这里。
Android上,用Java Calendar类(MonoDroid里有这个类的绑定)来计算日期。我们曾经考虑过用别的第三方库来实现,不过还是觉得让我们的库越小越好。在layout上,我们就自己写了个ListView:每行代表一个月,对于每个月再分别计算尺寸啥的,这样可以加快滚动速度。
下载
戳这里下载最新版本,然后以library project加到你的程序里。
软件许可
使用Apache 2.0许可。其实这倒是让我稍微补了一补课的地方。