TimesSquare实现选择日期日历控件,可单选,多选,区间范围和对话框四种方式。如图展示 区间范围视图。使用该控件,除了在布局文件中使用该控件外,需要为它创建
TimesSquare实现选择日期日历控件,可单选,,多选,区间范围和对话框四种方式。
如图展示
区间范围视图。
使用该控件,除了在布局文件中使用该控件外,需要为它创建一个编辑器:如SampleDecorator
代码示例:
public class SampleDecorator implements CalendarCellDecorator {
@Override
public void decorate(CalendarCellView cellView, Date date) {
String dateString = "";
MonthCellDescriptor cell = (MonthCellDescriptor) cellView.getTag();
Date currentDate = new Date();
if (currentDate.getYear() == date.getYear()
&& currentDate.getMonth() == date.getMonth()
&& currentDate.getDate() == date.getDate()) {
dateString = "本日";
} else {
dateString = Integer.toString(date.getDate());
}
if (cell.isInDate() && !cell.isOutDate()) {
dateString = "入住";
} else if (cell.isInDate() && cell.isOutDate()) {
dateString = "离店";
}
SpannableString string = new SpannableString(dateString);
string.setSpan(new RelativeSizeSpan(0.5f), 0, dateString.length(),
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
cellView.setText(string);
}
}
可以通过检测cell(每个格子)的属性来控制cell中对应的显示内容,达到定制效果。
在Activity中使用时,需要初始化控件。
示例代码:
private CalendarPickerView calendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_date);
ActivityBack.getInstance(this);
final Calendar nextYear = Calendar.getInstance();
nextYear.add(Calendar.YEAR, 1);
final Calendar lastYear = Calendar.getInstance();
lastYear.add(Calendar.YEAR, -1);
calendar = (CalendarPickerView) findViewById(R.id.calendar_picker);
List decorators = new ArrayList();
decorators.add(new SampleDecorator());
calendar.setDecorators(decorators);
calendar.init(lastYear.getTime(), nextYear.getTime())
.inMode(SelectionMode.SINGLE).withSelectedDate(new Date());
Calendar today = Calendar.getInstance();
ArrayList dates = new ArrayList();
Intent intent = getIntent();
// 设置多选日期起始位置从当前推迟多少天
today.add(
Calendar.DATE,
Utils.getDateDeffence((new Date().toString()),
intent.getStringExtra("INDATE")));
dates.add(today.getTime());
// 设置多选日期结束位置从入住日期推迟多少天
today.add(
Calendar.DATE,
Utils.getDateDeffence(intent.getStringExtra("INDATE"),
intent.getStringExtra("OUTDATE")));
dates.add(today.getTime());
calendar.init(new Date(), nextYear.getTime())
.inMode(SelectionMode.RANGE).withSelectedDates(dates);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
}
public void finish(View v) {
List dates = calendar.getSelectedDates();
Date firstdate = dates.get(0);
Date lastdate = dates.get(dates.size() - 1);
if (firstdate != null && lastdate != null) {
Intent intent = new Intent();
intent.putExtra("date1", firstdate.toString());
intent.putExtra("date2", lastdate.toString());
intent.putExtra("night", dates.size() - 1);
setResult(RESULT_OK, intent);
} else {
setResult(RESULT_CANCELED, null);
}
finish();
}
需要定制其他功能可以修改Library库中的对象编辑器属性来添加监听属性。
控件下载地址:等待更新