【AndroidのViewを制する】 CalendarViewを使いこなしてカレンダーを表示する

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

Androidでカレンダーを表示するときはCalendarViewを使います。

CalendarView#setDateとCalendarView#getDate

setDateは初期表示時に選択されている日付を引数で指定した日付に変更するメソッドです。
getDateは初期表示時に選択されている日付を返却します。
時間はUNIX時間を使用します。
final CalendarView calendarView = new CalendarView(this);
//現在の日付を取得する
Calendar selectedCalendar = Calendar.getInstance();
long selectedTimeInMills = selectedCalendar.getTimeInMillis();
//選択日付を指定します
calendarView.setDate(selectedTimeInMills);
//1秒後に処理を行う
calendarView.postDelayed(new Runnable() {
    @Override
    public void run() {
        Calendar selectedCalendar = Calendar.getInstance();
        //2か月後の日付を作成する
        selectedCalendar.add(Calendar.MONTH , 2);
        long selectedTimeInMills = selectedCalendar.getTimeInMillis();
        /**
        * 選択日付を指定する
        * ・第1引数 : 選択する日付
        * ・第2引数 : trueの場合はスクロールアニメーションをつけて日付が変更される。
        *            falseの場合は即座に変更される。
        * ・第3引数 : trueの場合は画面中央に持ってくる。
        *            falseの場合は選択された日付が画面上にある時はスクロールしない。
        **/
        calendarView.setDate(selectedTimeInMills , true ,true);
    }
} , 1000);

CalendarView#setMinDateとCalendarView#getMinDate

CalendarViewはデフォルトでは無制限に過去までスクロールすることができます。
しかし、一定の過去までしかスクロールできないないように制御したいことがあります。
そこで使うのがCalendarView#setMinDateメソッドを使用します、引数はUNIX時間で指定します。
また、CalendarView#getMinDateを使うことで設定している日付を取得することができます。
final CalendarView calendarView = new CalendarView(this);
// 一ヶ月前のUNIX時間を作成する。
Calendar minCalendar = Calendar.getInstance();
minCalendar.add(Calendar.MONTH , -1);
long minTimeInMills = minCalendar.getTimeInMillis();
// 遡れる制限を1か月前に制限する。
calendarView.setMinDate(minTimeInMills);

CalendarView#setMaxDateとCalendarView#getMaxDate

CalendarViewはデフォルトでは無制限に未来へスクロールすることができます。
しかし、一定の未来までしかスクロールできないように制御したいことがあります。
そこで使うのがCalendarView#setMaxDateメソッドを使用します、引数はUNIX時間で指定します。
また、CalendarView#getMaxDateを使うことで設定している日付を取得することができます。
final CalendarView calendarView = new CalendarView(this);
// 一ヶ月後のUNIX時間を作成する。
Calendar maxCalendar = Calendar.getInstance();
maxCalendar.add(Calendar.MONTH , 1);
long maxTimeInMills = maxCalendar.getTimeInMillis();
// 遡れる制限を1か月前に制限する。
calendarView.setMaxDate(maxTimeInMills);

CalendarView#setDateTextAppearanceとCalendarView#getDateTextAppearance

CalendarView#setDateTextAppearanceはカレンダーに表示されている日付文字のスタイルを変更します。
引数はstyleのリソースIDを指定します。
また、CalendarView#getDateTextAppearanceは現在設定されているリソースIDを取得することができます。
final CalendarView calendarView = new CalendarView(this);
// 日付文字のスタイルを変更する
calendarView.setDateTextAppearance(android.R.style.TextAppearance_DeviceDefault_Large);

CalendarView#setWeekDayTextAppearanceとCalendarView#getWeekDayTextAppearance

CalendarView#setWeekDayTextAppearanceはカレンダーに表示されている曜日文字のスタイルを変更します。
引数はstyleのリソースIDを指定します。
また、CalendarView#getWeekDayTextAppearanceは現在設定されているリソースIDを取得することができます。
final CalendarView calendarView = new CalendarView(this);
// 曜日文字のスタイルを変更する
calendarView.setWeekDayTextAppearance(android.R.style.TextAppearance_DeviceDefault_Large);

CalendarView#setFirstDayOfWeekとCalendarView#getFirstDayOfWeek

CalendarView#setFirstDayOfWeekを使うことでカレンダーの開始曜日を変更することができます。
CalendarView#setFirstDayOfWeekの引数はint型です、この引数にはCalendarの曜日定数を使用します。
また、CalendarView#getFirstDayOfWeekを使うことで現在設定されている週の開始曜日を取得することができます。
final CalendarView calendarView = new CalendarView(this);
/**
* ・Calendarの曜日定数を使用する。
* ・Calendar.SUNDAY:日曜日
* ・Calendar.MONDAY:月曜日
* ・Calendar.TUESDAY:火曜日
* ・Calendar.WEDNESDAY:水曜日
* ・Calendar.THURSDAY:木曜日
* ・Calendar.FRIDAY:金曜日
* ・Calendar.SATURDAY:土曜日
**/
// 週の開始曜日を木曜日に変更する
calendarView.setFirstDayOfWeek(Calendar.THURSDAY);

CalendarView#setOnDateChangeListener

CalendarView#setOnDateChangeListenerを使うことで、 現在選択されている日付が変更した時に呼ばれるコールバックインターフェースを設定できます。
final CalendarView calendarView = new CalendarView(this);
// 日付が変更した時に呼ばれるコールバックインターフェースを設定
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
        Log.d("you" , year + "年" + (month + 1) + "月" + dayOfMonth + "日");
    }
});

CalendarView#setShowWeekNumberとCalendarView#getShowWeekNumber

CalendarView#setShowWeekNumberを使うことで週数の表示非表示状態を設定することができます。
trueで表示状態、falseで非表示状態になります。デフォルトでは表示状態になっています。
また、CalendarView#getShowWeekNumberを使うことで現在の週数の表示非表示の設定を取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 週数表示を非表示状態にする。
calendarView.setShowWeekNumber(false);

CalendarView#setShownWeekCountとCalendarView#getShownWeekCount

CalendarView#setShownWeekCountを使うことでCalendarViewに表示する週数を設定することができます。
引数はint型の正の数です。0の場合はゼロ除算例外が発生し、負数の場合は一週も表示されません。
また、CalendarView#getShownWeekCountを使うことで現在の週数を取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 15週数表示する。
calendarView.setShownWeekCount(15);

CalendarView#setFocusedMonthDateColorとCalendarView#getFocusedMonthDateColor

CalendarView#setFocusedMonthDateColorを使うことで、選択中日付の属する月の日付の色を変更することができます。
また、CalendarView#getFocusedMonthDateColorを使うことで、選択中日付の属する月の日付の色を取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 選択中日付の属する月の日付の色を赤色に変更します。
calendarView.setFocusedMonthDateColor(Color.RED);

CalendarView#setUnfocusedMonthDateColorとCalendarView#getUnfocusedMonthDateColor

CalendarView#setUnfocusedMonthDateColorを使うことで、選択中日付の属さない月の日付の色を変更することができます。
また、CalendarView#getUnfocusedMonthDateColorを使うことで、選択中日付の属さない月の日付の色を取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 選択中日付の属さない月の日付の色を黄色に変更します。
calendarView.setUnfocusedMonthDateColor(Color.YELLOW);

CalendarView#setSelectedWeekBackgroundColorとCalendarView#getSelectedWeekBackgroundColor

CalendarView#setSelectedWeekBackgroundColorを使うことで、選択中日付の属する週の背景色を変更することができます。
また、CalendarView#getSelectedWeekBackgroundColorを使うことで、選択中日付の属する週の背景色を取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 選択中日付の属する週の背景色をシアンに変更します。
calendarView.setSelectedWeekBackgroundColor(Color.CYAN);

CalendarView#setWeekNumberColorとCalendarView#getWeekNumberColor

CalendarView#setWeekNumberColorを使うことで、週数の文字色を変更することができます。
また、CalendarView#getWeekNumberColorを使うことで、週数の文字色を取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 週数の文字色を青色に変更する。
calendarView.setWeekNumberColor(Color.BLUE);

CalendarView#setWeekSeparatorLineColorとCalendarView#getWeekSeparatorLineColor

CalendarView#setWeekSeparatorLineColorを使うことで、週を区切る線の色を変更することができます。
また、CalendarView#getWeekSeparatorLineColorを使うことで、週を区切る線の色を取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 週を区切る線の色を緑色に変更する。
calendarView.setWeekSeparatorLineColor(Color.GREEN);

CalendarView#setSelectedDateVerticalBarとCalendarView#getSelectedDateVerticalBar

CalendarView#setSelectedDateVerticalBarを使うことで、選択中日付に表示されるカーソルを変更する。
また、CalendarView#getSelectedDateVerticalBarを使うことで、選択中日付に表示されるカーソルを取得することができます。
このメソッドはAPI level 24で非推奨になっています。
final CalendarView calendarView = new CalendarView(this);
// 選択中日付に表示されるカーソルをランチャーアイコンに変更します。
calendarView.setSelectedDateVerticalBar(R.mipmap.ic_launcher);

まとめ

基本的なカレンダーを使うときは、ぜひCalendarViewを使用しましょう。