Как сделать собственное текстовое представление с точками? - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь сделать календарь, и я хочу показать пользователю какую-то информацию о том, какое событие хранится в определенный день.и я думал об использовании маленьких точек с цветом, который они выбрали для события, но я не могу найти способ сделать это, если это вообще возможно ... У меня есть это: calendar without dots и я хотел что-то вроде этого: enter image description here

Может ли кто-нибудь мне помочь или дать мне совет, как это сделать?

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете попробовать использовать стороннюю библиотеку material-calendarview для реализации этой функции, она предоставляет класс DayViewDecorators для настройки отдельных дней:

  • Установка пользовательских фонов
  • Установка пользовательских селекторов
  • Применение интервалов ко всему тексту дня
    • Мы предоставляем DotSpan, который нарисует точку по центру под текстом
  • Установить даты отключенными

Поскольку вы используете Xamarin.Android, вы можете использовать эту библиотеку Java в своем проекте Xamarin.Android через Связывание библиотеки Java .

Кстати, кто-то другой сделал эту работу за вас: https://github.com/NAXAM/materialcalendarview-xamarin-android-binding, вы можете напрямую установить его в пакет nuget .

Использование Simeple

Используйте это в XAML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.prolificinteractive.materialcalendarview.MaterialCalendarView
        android:id="@+id/calendar_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:background="@drawable/bg_custom_date_picker"
        app:mcv_selectionColor="@color/colorAccent"
        app:mcv_showOtherDates="other_months"
        android:layout_marginBottom="16dp"/>
</LinearLayout>

В вашем коде:

public class CalendarActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_calendar);

        MaterialCalendarView calendar = FindViewById<MaterialCalendarView>(Resource.Id.calendar_view);
        calendar.SetSelectedDate(Java.Util.Calendar.GetInstance(Java.Util.Locale.English));

        List<CalendarDay> dates = new List<CalendarDay>();

        CalendarDay a = CalendarDay.From(2018, 11, 10);
        CalendarDay b = CalendarDay.From(2018, 11, 15);
        CalendarDay c = CalendarDay.From(2018, 11, 9);
        CalendarDay d = CalendarDay.From(2018, 11, 1);

        dates.Add(a);
        dates.Add(b);
        dates.Add(c);
        dates.Add(d);

        calendar.AddDecorators(new EventDecorator(this, Color.Red, dates));
    }

    class EventDecorator : Java.Lang.Object, IDayViewDecorator
    {
        private int color;
        private List<CalendarDay> dates;

        public EventDecorator(CalendarActivity calendarActivity, int color, List<CalendarDay> dates)
        {
            this.color = color;
            this.dates = dates;
        }

        public void Decorate(DayViewFacade view)
        {
            view.AddSpan(new DotSpan(15, color));
        }

        public bool ShouldDecorate(CalendarDay day)
        {  
            //return dates.Contains(day);   
            //Has issue when using the above code: https://stackoverflow.com/questions/45193268/adding-decorations-using-materialcalendarview-binding-library-in-xamarin-android/45207338#45207338

            if (dates[0].ToString() == day.ToString() || dates[1].ToString() == day.ToString() || dates[2].ToString() == day.ToString() || dates[3].ToString() == day.ToString())
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

Эффект .

...