Xuni for Android のドキュメント
日付コンテンツのカスタマイズ

Xuni Calendar コントロールを使用して、日付スロットにカスタムコンテンツを追加できます。それには、CalendarViewDaySlot クラスの DaySlotLoading イベントをサブスクライブし、これらのスロットの背景に画像などのカスタムコンテンツを適用します。この機能を使用して、カレンダーに天気関連の情報を表示できます。

次の図は、日付スロットにカスタムコンテンツを追加した後の Xuni Calendar です。このカレンダーには、さまざまなアイコンで天気関連の情報が表示されます。

次のコード例は、Java でカレンダーの日付スロットにカスタムコンテンツを追加する方法を示します。この例では、「クイックスタート」で作成したサンプルを使用します。

サンプルコード

日付スロットにカスタムコンテンツを追加するには、次の手順を実行します。

  1. MainActivity クラスに、次の import 文を追加します。
    Java
    コードのコピー
    import java.util.Calendar;
    import java.util.Date;
    
    import com.grapecity.xuni.calendar.CalendarDayOfWeekSlot;
    import com.grapecity.xuni.calendar.CalendarDayOfWeekSlotLoadingEventArgs;
    import com.grapecity.xuni.calendar.CalendarDaySlotBase;
    import com.grapecity.xuni.calendar.CalendarDaySlotLoadingEventArgs;
    import com.grapecity.xuni.calendar.CalendarDetailDaySlot;
    import com.grapecity.xuni.calendar.DayOfWeek;
    import com.grapecity.xuni.calendar.XuniCalendar;
    import com.grapecity.xuni.core.IEventHandler;
    
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Color;
    import android.graphics.Typeface;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    C#
    コードのコピー
    using Android.App;
    using Android.Content;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    using Android.OS;
    using Android.Graphics;
    using Com.GrapeCity.Xuni.Core;
    using Com.GrapeCity.Xuni.Calendar;
    
  2. MainActivity クラスの既存のコードを次のコードに置き換えます。
    Java
    コードのコピー
    public class MainActivity extends Activity 
    {
            private XuniCalendar calendar;
            private Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) 
        
        {
            com.grapecity.xuni.core.LicenseManager.KEY = License.KEY;
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            context = this;
            
            calendar = (XuniCalendar) findViewById(R.id.calendar);
            
            calendar.getDayOfWeekSlotLoading().addHandler(new IEventHandler()
                    {
                            @Override
                            public void call(Object arg0, Object arg1)
                            {
                                    CalendarDayOfWeekSlotLoadingEventArgs args = (CalendarDayOfWeekSlotLoadingEventArgs) arg1;
                                    DayOfWeek dayOfWeek = args.getDayOfWeek();
                                    CalendarDayOfWeekSlot slot = (CalendarDayOfWeekSlot) args.getDayOfWeekSlot();
                                    if (dayOfWeek == DayOfWeek.Sunday || dayOfWeek == DayOfWeek.Saturday)
                                    {
                                            slot.setDayOfWeekTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC));
                                    }
                                    else
                                    {
                                            slot.setDayOfWeekTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD));
                                    }
                            }
                    }, this);
    
                    calendar.getDaySlotLoading().addHandler(new IEventHandler()
                    {
                            @Override
                            public void call(Object arg0, Object arg1)
                            {
                                    CalendarDaySlotLoadingEventArgs args = (CalendarDaySlotLoadingEventArgs) arg1;
    
                                    Date date = args.getDate();
    
                                    if (args.isAdjacentDay())
                                    {
                                            Calendar cal = Calendar.getInstance();
                                            cal.setTime(date);
                                            int day = cal.get(Calendar.DAY_OF_MONTH);
    
                                            CalendarDetailDaySlot view = new CalendarDetailDaySlot(context);
                                            view.setDayText(String.valueOf(day));
                                            view.setBackgroundColor(Color.WHITE);
                                            view.setDayTextColor(Color.GRAY);
                                            view.setDetailText(cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1));
                                            view.setDetailFontSize(8);
                                            view.setDetailTextColor(Color.GRAY);
    
                                            args.setDaySlot(view);
                                    }
                                    else
                                    {
                                            CalendarDaySlotBase layout = new CalendarDaySlotBase(context);
    
                                            Calendar cal = Calendar.getInstance();
                                            cal.setTime(date);
                                            int day = cal.get(Calendar.DAY_OF_MONTH);
    
                                            TextView tv = new TextView(context);
                                            tv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
                                            tv.setText(String.valueOf(day));
    
                                            ImageView iv = new ImageView(context);
                                            iv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    
                                            if (day >= 14 && day <= 23)
                                            {
                                                    tv.setTextSize(9);
                                                    tv.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL));
                                                    tv.setGravity(Gravity.LEFT | Gravity.TOP);
    
                                                    iv.setImageResource(weatherIconIds[day % 4]);
                                            }
                                            else
                                            {
                                                    tv.setTextSize(18);
                                                    tv.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD));
                                                    tv.setGravity(Gravity.CENTER);
    
                                                    iv.setImageResource(dotResourceIds[day % 3]);
                                            }
    
                                            layout.addView(tv);
                                            layout.addView(iv);
                                            layout.setGravity(Gravity.CENTER);
                                            layout.setOrientation(LinearLayout.VERTICAL);
                                            layout.setBackgroundColor(Color.WHITE);
    
                                            args.setDaySlot(layout);
                                    }
                            }
                    }, this);
    
                    Calendar cal = Calendar.getInstance();
                    cal.set(2016, 1, 1);
                    calendar.setDisplayDate(cal.getTime());
            }
    
            String[] titles =
            { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
            int[] dotResourceIds =
            { R.drawable.blue, R.drawable.red, R.drawable.green };
            int[] weatherIconIds =
            { R.drawable.sunny, R.drawable.cloudy, R.drawable.rainy, R.drawable.stomy };
    }
    
    C#
    コードのコピー
    public class MainActivity : Activity
        {
            XuniCalendar calendar;
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);
                //"main"レイアウトリソースからビューを設定します。
                SetContentView(Resource.Layout.Main);
                calendar = (XuniCalendar) FindViewById(Resource.Id.calendar);
                calendar.DaySlotLoading += calendar_DaySlotLoading;
            }
            void calendar_DaySlotLoading(object sender, CalendarDaySlotLoadingEventArgs e)
            {
                // 日付を取得します。
                Java.Util.Date date = e.Date;
                Java.Util.Calendar cal = Java.Util.Calendar.GetInstance(Java.Util.Locale.English);
                cal.Time = date;
                int day = cal.Get(Java.Util.CalendarField.DayOfMonth);
    
                // 日付スロットレイアウトコンテナを作成します。
                CalendarDaySlotBase layout = new CalendarDaySlotBase(ApplicationContext);
                layout.SetGravity(GravityFlags.Top);
                layout.SetVerticalGravity(GravityFlags.Top);
                layout.Orientation = Orientation.Vertical;
                layout.SetPadding(5, 5, 5, 5);
                LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.FillParent);
                layout.LayoutParameters = linearLayoutParams;
    
                // テキスト要素を作成します。
                TextView tv = new TextView(ApplicationContext);
                //LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.WrapContent);
                //vv.LayoutParameters = linearLayoutParams;
                tv.Gravity = GravityFlags.Top;
                tv.Text = day.ToString();
    
                if (e.AdjacentDay)
                {
                    // 隣接日のテキストをフォーマットします。
                    tv.SetTextColor(Android.Graphics.Color.DarkGray);
                }
    
                // レイアウトにテキスト要素を追加します。
                layout.AddView(tv);
    
    
                // 特定の日に天気画像を追加します。
                if (day >= 14 && day <= 23)
                {
                    ImageView iv = new ImageView(ApplicationContext);
                    switch (day % 5)
                    {
                        case 0: iv.SetImageResource(Resource.Drawable.Cloudy);
                            break;
                        case 1: iv.SetImageResource(Resource.Drawable.PartlyCloudy);
                            break;
                        case 2: iv.SetImageResource(Resource.Drawable.Rain);
                            break;
                        case 3: iv.SetImageResource(Resource.Drawable.Storm);
                            break;
                        case 4: iv.SetImageResource(Resource.Drawable.Sun);
                            break;
    
                    }
                    layout.AddView(iv);
    
                }
    
                // 最後に、レイアウトを日付スロットに設定します。
                e.DaySlot = layout;
            }
        }
    

画像アイコンをリソースファイルとして Eclipse プロジェクトの場所 YourProject\res\drawable-mdpi に追加します。

 

 


Copyright © GrapeCity inc. All rights reserved.