C1Calendar コントロールは、デフォルトのヘッダーとして現在の月または年とナビゲーションボタンを表示します。また、ShowHeader プロパティを False に設定してデフォルトのヘッダーを非表示(削除)し、カスタムヘッダーを適用できます。
次の図は、カスタムヘッダーを含む Xamarin Calendar を示します。
Month ラベルをタップすると、カレンダーは、月または年モードに切り替えるオプションを提供します。Today ラベルは、カレンダーを現在の日付にナビゲートします。
次のコード例は、Java で、Xamrin Calendar コントロールでカスタムヘッダーを作成して適用する方法を示します。この例では、「クイックスタート」で作成したサンプルを使用します。
Xamarin Calendar コントロールのヘッダーをカスタマイズするには、次の手順を実行します。
MainActivity.cs |
コードのコピー
|
---|---|
using Android.App; using Android.Content.PM; using Android.OS; using Android.Views; using Android.Widget; using System; |
MainActivity.cs |
コードのコピー
|
---|---|
public class MainActivity : Activity { private TextView monthLabel; private Spinner viewModeSpinner; private Button todayButton; private C1Calendar calendar; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); ActionBar.SetDisplayHomeAsUpEnabled(true); SetContentView(Resource.Layout.CustomHeader); viewModeSpinner = FindViewById<Spinner>(Resource.Id.ViewModeSpinner); todayButton = FindViewById<Button>(Resource.Id.TodayButton); calendar = FindViewById<C1Calendar>(Resource.Id.Calendar); monthLabel = FindViewById<TextView>(Resource.Id.MonthLabel); todayButton.Click += OnTodayClicked; var items = new CalendarViewMode[] { CalendarViewMode.Month, CalendarViewMode.Year, CalendarViewMode.Decade }; var adapterItems = Resources.GetStringArray(Resource.Array.viewModeSpinnerValues); viewModeSpinner.Adapter = new ArrayAdapter(BaseContext, global::Android.Resource.Layout.SimpleListItem1, adapterItems); viewModeSpinner.ItemSelected += OnModeChanged; calendar.ViewModeChanged += OnViewModeChanged; calendar.DisplayDateChanged += OnDisplayDateChanged; UpdateMonthLabel(); } private async void OnModeChanged(object sender, AdapterView.ItemSelectedEventArgs e) { switch (viewModeSpinner.SelectedItemPosition) { case 0: await calendar.ChangeViewModeAsync(CalendarViewMode.Month); break; case 1: await calendar.ChangeViewModeAsync(CalendarViewMode.Year); break; case 2: await calendar.ChangeViewModeAsync(CalendarViewMode.Decade); break; } } private async void OnTodayClicked(object sender, System.EventArgs e) { await calendar.ChangeViewModeAsync(CalendarViewMode.Month, DateTime.Today); calendar.SelectedDate = DateTime.Today; } private void OnViewModeChanged(object sender, EventArgs e) { switch (calendar.ViewMode) { case CalendarViewMode.Month: viewModeSpinner.SetSelection(0); break; case CalendarViewMode.Year: viewModeSpinner.SetSelection(1); break; case CalendarViewMode.Decade: viewModeSpinner.SetSelection(2); break; } } private void OnDisplayDateChanged(object sender, EventArgs e) { UpdateMonthLabel(); } private void UpdateMonthLabel() { monthLabel.Text = calendar.DisplayDate.ToString("Y"); } public override bool OnOptionsItemSelected(IMenuItem item) { if (item.ItemId == global::Android.Resource.Id.Home) { Finish(); return true; } else { return base.OnOptionsItemSelected(item); } } } |
Main.axml |
コードのコピー
|
---|---|
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:calendar="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:weightSum="1" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0"> <Spinner android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="0.5" android:id="@+id/ViewModeSpinner" /> <Button android:text="Today" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.5" android:id="@+id/TodayButton" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" android:id="@+id/MonthLabel" android:gravity="center" android:text="July 2016" android:textSize="20dip" android:layout_margin="4dip" /> <c1.android.calendar.C1Calendar android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:id="@+id/Calendar" calendar:c1_showHeader="false" /> </LinearLayout> |