android调用日历库,Android学习教程之日历库使用(15)

本教程为大家分享了Android日历库的使用方法,供大家参考,具体内容如下

MainActivity.java代码:

package siso.weekv;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.buttonBasic).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this, BasicActivity.class);

startActivity(intent);

}

});

findViewById(R.id.buttonAsynchronous).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this, AsynchronousActivity.class);

startActivity(intent);

}

});

}

}

AsynchronousActivity.java代码:

package siso.weekv;

import android.widget.Toast;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.List;

import retrofit.Callback;

import retrofit.RestAdapter;

import retrofit.RetrofitError;

import retrofit.client.Response;

import siso.weekv.apiclient.Event;

import siso.weekv.apiclient.MyJsonService;

import siso.wvlib.WeekViewEvent;

/**

* An example of how events can be fetched from network and be displayed on the week view.

* Created by Raquib-ul-Alam Kanak on 1/3/2014.

* Website: http://alamkanak.github.io

*/

public class AsynchronousActivity extends BaseActivity implements Callback> {

private List events = new ArrayList();

boolean calledNetwork = false;

@Override

public List extends WeekViewEvent> onMonthChange(int newYear, int newMonth) {

// Download events from network if it hasn't been done already. To understand how events are

// downloaded using retrofit, visit http://square.github.io/retrofit

if (!calledNetwork) {

RestAdapter retrofit = new RestAdapter.Builder()

.setEndpoint("https://api.myjson.com/bins")

.build();

MyJsonService service = retrofit.create(MyJsonService.class);

service.listEvents(this);

calledNetwork = true;

}

// Return only the events that matches newYear and newMonth.

List matchedEvents = new ArrayList();

for (WeekViewEvent event : events) {

if (eventMatches(event, newYear, newMonth)) {

matchedEvents.add(event);

}

}

return matchedEvents;

}

/**

* Checks if an event falls into a specific year and month.

* @param event The event to check for.

* @param year The year.

* @param month The month.

* @return True if the event matches the year and month.

*/

private boolean eventMatches(WeekViewEvent event, int year, int month) {

return (event.getStartTime().get(Calendar.YEAR) == year && event.getStartTime().get(Calendar.MONTH) == month - 1) || (event.getEndTime().get(Calendar.YEAR) == year && event.getEndTime().get(Calendar.MONTH) == month - 1);

}

@Override

public void success(List events, Response response) {

this.events.clear();

for (Event event : events) {

this.events.add(event.toWeekViewEvent());

}

getWeekView().notifyDatasetChanged();

}

@Override

public void failure(RetrofitError error) {

error.printStackTrace();

Toast.makeText(this, R.string.async_error, Toast.LENGTH_SHORT).show();

}

}

BaseActivity.java

package siso.weekv;

import android.graphics.RectF;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.util.TypedValue;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.Toast;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Locale;

import siso.wvlib.DateTimeInterpreter;

import siso.wvlib.MonthLoader;

import siso.wvlib.WeekView;

import siso.wvlib.WeekViewEvent;

public abstract class BaseActivity extends AppCompatActivity implements WeekView.EventClickListener, MonthLoader.MonthChangeListener, WeekView.EventLongPressListener, WeekView.EmptyViewLongPressListener {

private static final int TYPE_DAY_VIEW = 1;

private static final int TYPE_THREE_DAY_VIEW = 2;

private static final int TYPE_WEEK_VIEW = 3;

private int mWeekViewType = TYPE_THREE_DAY_VIEW;

private WeekView mWeekView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_base);

// Get a reference for the week view in the layout.

mWeekView = (WeekView) findViewById(R.id.weekView);

// Show a toast message about the touched event.

mWeekView.setOnEventClickListener(this);

mWeekView.setMonthChangeListener(this);

// Set long press listener for events.

mWeekView.setEventLongPressListener(this);

mWeekView.setEmptyViewLongPressListener(this);

setupDateTimeInterpreter(false);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

setupDateTimeInterpreter(id == R.id.action_week_view);

switch (id){

case R.id.action_today:

mWeekView.goToToday();

return true;

case R.id.action_day_view:

if (mWeekViewType != TYPE_DAY_VIEW) {

item.setChecked(!item.isChecked());

mWeekViewType = TYPE_DAY_VIEW;

mWeekView.setNumberOfVisibleDays(1);

// Lets change some dimensions to best fit the view.

mWeekView.setColumnGap((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()));

mWeekView.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, getResources().getDisplayMetrics()));

mWeekView.setEventTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, getResources().getDisplayMetrics()));

}

return true;

case R.id.action_three_day_view:

if (mWeekViewType != TYPE_THREE_DAY_VIEW) {

item.setChecked(!item.isChecked());

mWeekViewType = TYPE_THREE_DAY_VIEW;

mWeekView.setNumberOfVisibleDays(3);

// Lets change some dimensions to best fit the view.

mWeekView.setColumnGap((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics()));

mWeekView.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, getResources().getDisplayMetrics()));

mWeekView.setEventTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12, getResources().getDisplayMetrics()));

}

return true;

case R.id.action_week_view:

if (mWeekViewType != TYPE_WEEK_VIEW) {

item.setChecked(!item.isChecked());

mWeekViewType = TYPE_WEEK_VIEW;

mWeekView.setNumberOfVisibleDays(7);

mWeekView.setColumnGap((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()));

mWeekView.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics()));

mWeekView.setEventTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics()));

}

return true;

}

return super.onOptionsItemSelected(item);

}

private void setupDateTimeInterpreter(final boolean shortDate) {

mWeekView.setDateTimeInterpreter(new DateTimeInterpreter() {

@Override

public String interpretDate(Calendar date) {

SimpleDateFormat weekdayNameFormat = new SimpleDateFormat("EEE", Locale.getDefault());

String weekday = weekdayNameFormat.format(date.getTime());

SimpleDateFormat format = new SimpleDateFormat(" M/d", Locale.getDefault());

if (shortDate)

weekday = String.valueOf(weekday.charAt(0));

return weekday.toUpperCase() + format.format(date.getTime());

}

@Override

public String interpretTime(int hour) {

return hour > 11 ? (hour - 12) + " PM" : (hour == 0 ? "12 AM" : hour + " AM");

}

});

}

protected String getEventTitle(Calendar time) {

return String.format("事件 %02d:%02d %s/%d", time.get(Calendar.HOUR_OF_DAY), time.get(Calendar.MINUTE), time.get(Calendar.MONTH)+1, time.get(Calendar.DAY_OF_MONTH));

}

@Override

public void onEventClick(WeekViewEvent event, RectF eventRect) {

Toast.makeText(this, "点击 " + event.getName(), Toast.LENGTH_SHORT).show();

}

@Override

public void onEventLongPress(WeekViewEvent event, RectF eventRect) {

Toast.makeText(this, "长按事件: " + event.getName(), Toast.LENGTH_SHORT).show();

}

@Override

public void onEmptyViewLongPress(Calendar time) {

Toast.makeText(this, "空视图长按: " + getEventTitle(time), Toast.LENGTH_SHORT).show();

}

public WeekView getWeekView() {

return mWeekView;

}

}

BasicActivity.java

package siso.weekv;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.List;

import siso.wvlib.WeekViewEvent;

public class BasicActivity extends BaseActivity {

@Override

public List extends WeekViewEvent> onMonthChange(int newYear, int newMonth) {

// Populate the week view with some events.

List events = new ArrayList();

Calendar startTime = Calendar.getInstance();

startTime.set(Calendar.HOUR_OF_DAY, 3);

startTime.set(Calendar.MINUTE, 0);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

Calendar endTime = (Calendar) startTime.clone();

endTime.add(Calendar.HOUR, 1);

endTime.set(Calendar.MONTH, newMonth-1);

WeekViewEvent event = new WeekViewEvent(1, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_01));

events.add(event);

startTime = Calendar.getInstance();

startTime.set(Calendar.HOUR_OF_DAY, 3);

startTime.set(Calendar.MINUTE, 30);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

endTime = (Calendar) startTime.clone();

endTime.set(Calendar.HOUR_OF_DAY, 4);

endTime.set(Calendar.MINUTE, 30);

endTime.set(Calendar.MONTH, newMonth-1);

event = new WeekViewEvent(10, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_02));

events.add(event);

startTime = Calendar.getInstance();

startTime.set(Calendar.HOUR_OF_DAY, 4);

startTime.set(Calendar.MINUTE, 20);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

endTime = (Calendar) startTime.clone();

endTime.set(Calendar.HOUR_OF_DAY, 5);

endTime.set(Calendar.MINUTE, 0);

event = new WeekViewEvent(10, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_03));

events.add(event);

startTime = Calendar.getInstance();

startTime.set(Calendar.HOUR_OF_DAY, 5);

startTime.set(Calendar.MINUTE, 30);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

endTime = (Calendar) startTime.clone();

endTime.add(Calendar.HOUR_OF_DAY, 2);

endTime.set(Calendar.MONTH, newMonth-1);

event = new WeekViewEvent(2, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_02));

events.add(event);

startTime = Calendar.getInstance();

startTime.set(Calendar.HOUR_OF_DAY, 5);

startTime.set(Calendar.MINUTE, 0);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

startTime.add(Calendar.DATE, 1);

endTime = (Calendar) startTime.clone();

endTime.add(Calendar.HOUR_OF_DAY, 3);

endTime.set(Calendar.MONTH, newMonth - 1);

event = new WeekViewEvent(3, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_03));

events.add(event);

startTime = Calendar.getInstance();

startTime.set(Calendar.DAY_OF_MONTH, 15);

startTime.set(Calendar.HOUR_OF_DAY, 3);

startTime.set(Calendar.MINUTE, 0);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

endTime = (Calendar) startTime.clone();

endTime.add(Calendar.HOUR_OF_DAY, 3);

event = new WeekViewEvent(4, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_04));

events.add(event);

startTime = Calendar.getInstance();

startTime.set(Calendar.DAY_OF_MONTH, 1);

startTime.set(Calendar.HOUR_OF_DAY, 3);

startTime.set(Calendar.MINUTE, 0);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

endTime = (Calendar) startTime.clone();

endTime.add(Calendar.HOUR_OF_DAY, 3);

event = new WeekViewEvent(5, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_01));

events.add(event);

startTime = Calendar.getInstance();

startTime.set(Calendar.DAY_OF_MONTH, startTime.getActualMaximum(Calendar.DAY_OF_MONTH));

startTime.set(Calendar.HOUR_OF_DAY, 15);

startTime.set(Calendar.MINUTE, 0);

startTime.set(Calendar.MONTH, newMonth-1);

startTime.set(Calendar.YEAR, newYear);

endTime = (Calendar) startTime.clone();

endTime.add(Calendar.HOUR_OF_DAY, 3);

event = new WeekViewEvent(5, getEventTitle(startTime), startTime, endTime);

event.setColor(getResources().getColor(R.color.event_color_02));

events.add(event);

return events;

}

}

apiclient文件夹下Event.java和MyJsonService.java

package siso.weekv.apiclient;

import android.annotation.SuppressLint;

import android.graphics.Color;

import com.google.gson.annotations.Expose;

import com.google.gson.annotations.SerializedName;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import siso.wvlib.WeekViewEvent;

public class Event {

@Expose @SerializedName("name")

private String mName;

@Expose @SerializedName("dayOfMonth")

private int mDayOfMonth;

@Expose @SerializedName("startTime")

private String mStartTime;

@Expose @SerializedName("endTime")

private String mEndTime;

@Expose @SerializedName("color")

private String mColor;

public String getName() {

return mName;

}

public void setName(String name) {

this.mName = name;

}

public int getDayOfMonth() {

return mDayOfMonth;

}

public void setDayOfMonth(int dayOfMonth) {

this.mDayOfMonth = dayOfMonth;

}

public String getStartTime() {

return mStartTime;

}

public void setStartTime(String startTime) {

this.mStartTime = startTime;

}

public String getEndTime() {

return mEndTime;

}

public void setEndTime(String endTime) {

this.mEndTime = endTime;

}

public String getColor() {

return mColor;

}

public void setColor(String color) {

this.mColor = color;

}

@SuppressLint("SimpleDateFormat")

public WeekViewEvent toWeekViewEvent(){

// Parse time.

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");

Date start = new Date();

Date end = new Date();

try {

start = sdf.parse(getStartTime());

} catch (ParseException e) {

e.printStackTrace();

}

try {

end = sdf.parse(getEndTime());

} catch (ParseException e) {

e.printStackTrace();

}

// Initialize start and end time.

Calendar now = Calendar.getInstance();

Calendar startTime = (Calendar) now.clone();

startTime.setTimeInMillis(start.getTime());

startTime.set(Calendar.YEAR, now.get(Calendar.YEAR));

startTime.set(Calendar.MONTH, now.get(Calendar.MONTH));

startTime.set(Calendar.DAY_OF_MONTH, getDayOfMonth());

Calendar endTime = (Calendar) startTime.clone();

endTime.setTimeInMillis(end.getTime());

endTime.set(Calendar.YEAR, startTime.get(Calendar.YEAR));

endTime.set(Calendar.MONTH, startTime.get(Calendar.MONTH));

endTime.set(Calendar.DAY_OF_MONTH, startTime.get(Calendar.DAY_OF_MONTH));

// Create an week view event.

WeekViewEvent weekViewEvent = new WeekViewEvent();

weekViewEvent.setName(getName());

weekViewEvent.setStartTime(startTime);

weekViewEvent.setEndTime(endTime);

weekViewEvent.setColor(Color.parseColor(getColor()));

return weekViewEvent;

}

}

package siso.weekv.apiclient;

import java.util.List;

import retrofit.Callback;

import retrofit.http.GET;

/**

* Created by Raquib-ul-Alam Kanak on 1/3/16.

* Website: http://alamkanak.github.io

*/

public interface MyJsonService {

//https://api.myjson.com/bins/3nh0k

@GET("/3nh0k")

void listEvents(Callback> eventsCallback);

}

app项目结构:

aee153904eda8644e712580a9a64bfe9.png

Andriod类库项目结构:

ec74a5653f6e403182d7e04e0c0d1218.png

项目运行结果如图:

32defb335c0e84fea0244637158f3b22.png

b26057faa0eb7bd914d9d64dbd022333.png

e92570e509ce5d62f85338cb7a3b855c.png

dd9c94ae8c63ca0af5c52e41d6cfe915.png

7c9de1837a6ab3032dd0a2f12d04db1b.png

3fc033c2fdf4b1877e9d3f11114326d0.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值