Xamarin.Android のドキュメント
ヘッダーのカスタマイズ
コントロール > Calendar > 機能 > ヘッダーのカスタマイズ

C1Calendar コントロールは、デフォルトのヘッダーとして現在の月または年とナビゲーションボタンを表示します。また、ShowHeader プロパティを False に設定してデフォルトのヘッダーを非表示(削除)し、カスタムヘッダーを適用できます。

次の図は、カスタムヘッダーを含む Xamarin Calendar を示します。

Month ラベルをタップすると、カレンダーは、月または年モードに切り替えるオプションを提供します。Today ラベルは、カレンダーを現在の日付にナビゲートします。

次のコード例は、Java で、Xamrin Calendar コントロールでカスタムヘッダーを作成して適用する方法を示します。この例では、「クイックスタート」で作成したサンプルを使用します。

C# のコード

Xamarin Calendar コントロールのヘッダーをカスタマイズするには、次の手順を実行します。

  1. MainActivity クラスに、次の import 文を追加します。
    MainActivity.cs
    コードのコピー
    using Android.App;
    using Android.Content.PM;
    using Android.OS;
    using Android.Views;
    using Android.Widget;
    using System;
    
  2. MainActivity クラスの既存のコードを次のコードに置き換えます。
    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);
                }
            }
        }
    
  3. Main.axml に次の XML コードを追加して、コントロールをデバイスにレンダリングします。
    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>