土曜日と日曜日の色を変更したカレンダーを表示する方法(Xamarin.Android)
対象製品
Xuni
詳細
Xuniのカレンダーコントロールは、規定で標準的なカレンダーを表示し、
日付選択ができる状態になりカレンダーとしての機能を利用できます。
これが標準的な表示です。
日本にある多くのカレンダーは、土曜日が青、日曜日が赤で表示されています。
カレンダーをカスタマイズして、曜日の色を変更するには以下のコード記述で
実現できます。
曜日、日付ともに対応するイベント内で表示内容を変更します。
曜日を表示する領域(曜日スロット): DayOfWeekSlotLoading
日付を表示する領域(日付スロット): DaySlotLoading
このイベント内でカレンダーに表示される領域を判断して設定する必要がありますが、
Xamarin.Androidでは曜日の取得方法が異なりますのでご注意ください。
曜日スロットはイベントの引数でそのまま曜日情報(DayOfWeek)が渡されますが、
日付スロットではJava.Util.Date型で対象スロットの日付が引数として渡されます。
その日付情報をもとにシステムのカレンダーから曜日を取得します。
また、曜日列挙型がシステムとXuniでは原点が異なるため、
ゼロオリジンであるXuniのDayOfWeek列挙型に合わせて、
1を引いた値を関数に渡す必要があります。
サンプルでは日付スロットの処理内に記述してあります。
サンプルコード
C#(Xamarin.Android)
Xuni > 技術情報 > ドキュメント > Calendar-機能-日付コンテンツのカスタマイズ
日付選択ができる状態になりカレンダーとしての機能を利用できます。
これが標準的な表示です。
日本にある多くのカレンダーは、土曜日が青、日曜日が赤で表示されています。
カレンダーをカスタマイズして、曜日の色を変更するには以下のコード記述で
実現できます。
曜日、日付ともに対応するイベント内で表示内容を変更します。
曜日を表示する領域(曜日スロット): 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-機能-日付コンテンツのカスタマイズ