土曜日と日曜日の色を変更したカレンダーを表示する方法(Android)

文書番号 : 82054     文書種別 : HowTo
登録日 : 2017/03/10     最終更新日 : 2017/03/10

対象製品

Xuni

詳細

土曜日と日曜日の色を変更したカレンダーを表示する方法(Android)

Xuniのカレンダーコントロールは、規定で標準的なカレンダーを表示し、
日付選択ができる状態になりカレンダーとしての機能を利用できます。
これが標準的な表示です。

日本にある多くのカレンダーは、土曜日が青、日曜日が赤で表示されています。
カレンダーをカスタマイズして、曜日の色を変更するには以下のコード記述で
実現できます。
曜日、日付ともに対応するイベント内で表示内容を変更します。

曜日を表示する領域(曜日スロット): DayOfWeekSlotLoading
日付を表示する領域(日付スロット): DaySlotLoading

このイベント内でカレンダーに表示される領域を判断して設定する必要がありますが、
Androidでは曜日の取得方法が異なりますのでご注意ください。
曜日スロットはイベントの引数でそのまま曜日情報(DayOfWeek)が渡されますが、
日付スロットではJava.Util.Date型で対象スロットの日付が引数として渡されます。
その日付情報をもとにシステムのカレンダーから曜日を取得します。

また、曜日列挙型がシステムとXuniでは原点が異なるため、
ゼロオリジンであるXuniのDayOfWeek列挙型に合わせて、1を引いた値を関数に渡す必要があります。

サンプルでは日付スロットの処理内に記述してあります。

サンプルコード
Java
public class GettingStartedActivity extends Activity
{
    XuniCalendar calendar;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // "activity_getting_started"レイアウトからビューを設定します。
        setContentView(R.layout.activity_getting_started);

        // カレンダーオブジェクトの取得
        calendar = (XuniCalendar) findViewById(R.id.calendar1);

        // 曜日スロット(DayOfWeekSlot)の処理
        calendar.getDayOfWeekSlotLoading().addHandler(new IEventHandler()
        {
            @Override
            public void call(Object sender, Object args1) {
                // 曜日領域を設定するイベントの引数
                CalendarDayOfWeekSlotLoadingEventArgs args = (CalendarDayOfWeekSlotLoadingEventArgs) args1;
                // 引数から曜日スロットを取得
                CalendarDayOfWeekSlot dayofWeekSlot = (CalendarDayOfWeekSlot)args.getDayOfWeekSlot();
                // 引数から曜日を取得
                DayOfWeek dayOfWeek = args.getDayOfWeek();
                // 曜日の色を取得して設定
                dayofWeekSlot.setDayOfWeekTextColor(getColor(dayOfWeek));
            }
        },this);

        // 日付スロット(DaySlot)の処理
        calendar.getDaySlotLoading().addHandler(new IEventHandler()
        {
            @Override
            public void call(Object sender, Object args1) {

                // 日付領域を設定するイベントの引数
                CalendarDaySlotLoadingEventArgs args = (CalendarDaySlotLoadingEventArgs)args1;
                //前後に隣接する月の日付の場合は対象外
                if(args.isAdjacentDay()) return;

                // システムのカレンダーを取得
                Calendar c  = Calendar.getInstance();
                c.setTime(args.getDate());
                int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

                // 日付領域をカスタマイズして作成
                CalendarDaySlot daySlot = (CalendarDaySlot)args.getDaySlot();
                // システムの曜日の値をXuniの列挙型(ゼロオリジン)に変換
                daySlot.setDayTextColor(getColor(DayOfWeek.fromId(dayOfWeek-1)));

            }
        }, this);
    }
    // 曜日で判断して色を返す関数
    private int getColor( DayOfWeek dayofweek)
    {
        int color = Color.BLACK;// 既定値は黒
        // 土曜日は青
        if (dayofweek == DayOfWeek.Saturday) color = Color.BLUE;
        // 日曜日は赤
        if (dayofweek == DayOfWeek.Sunday) color = Color.RED;

        return color;
    }
}





Xuni > 技術情報 > ドキュメントCalendar-機能-日付コンテンツのカスタマイズ