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

文書番号 : 81956     文書種別 : HowTo
登録日 : 2017/01/30     最終更新日 : 2017/01/30

対象製品

Xuni

詳細

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

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

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

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

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

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

サンプルコード
C#(Xamarin.Android)
public class MainActivity : Activity
{
    XuniCalendar calendar;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // ライセンスの設定
        Com.GrapeCity.Xuni.Core.LicenseManager.Key = License.Key;

        // "main"レイアウトからビューを設定します。
        SetContentView(Resource.Layout.Main);

        calendar = (XuniCalendar)FindViewById(Resource.Id.calendar);
        calendar.FontSize = 20;
        calendar.DayOfWeekFontSize = 20;
        // 曜日スロットの処理
        calendar.DayOfWeekSlotLoading += (object sender, CalendarDayOfWeekSlotLoadingEventArgs e) =>
            {
                // 曜日スロットを取得して曜日領域に表示する内容を設定
                var dayofweekslot = e.DayOfWeekSlot as CalendarDayOfWeekSlot;
                dayofweekslot.DayOfWeekTextColor = getColor(e.DayOfWeek);

            };

        // 日付スロットの処理
        calendar.DaySlotLoading += (object sender, CalendarDaySlotLoadingEventArgs e) =>
        {
            // 当月カレンダーの処理(前後の月に隣接する日ではない)
            if (!e.AdjacentDay)
            {
                // 日付スロットを取得して日付領域に表示する内容を設定
                var daySlot = e.DaySlot as Com.GrapeCity.Xuni.Calendar.CalendarDaySlot;

                // システムのカレンダーを取得
                Java.Util.Calendar cl = Java.Util.Calendar.GetInstance(Java.Util.TimeZone.Default);
                // カレンダーに対象の日付を設定し曜日を取得
                cl.Time = e.Date;
                var sys_DayOfWeek = cl.Get(Java.Util.CalendarField.DayOfWeek);
                // システムの曜日列挙型をXuniの列挙型(ゼロオリジン)に変換
                var xuni_DayOfWeek = DayOfWeek.FromId(sys_DayOfWeek - 1);

                daySlot.DayTextColor = getColor(xuni_DayOfWeek);
            }
        };

    }
    // 曜日で判断して色を返す関数
    private Android.Graphics.Color getColor(Com.GrapeCity.Xuni.Calendar.DayOfWeek dayofWeek)
    {
        Color color = Color.White; // 既定値は白
        // 土曜日は青
        if (dayofWeek == DayOfWeek.Saturday) color = Color.Blue;
        // 日曜日は赤
        if (dayofWeek == DayOfWeek.Sunday) color = Color.Red;

        return color;
    }

}





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