Другой цвет для отключенных дат CalendarView

#java #android #gregorian-calendar #calendarview

#java #Android #григорианский-календарь #calendarview

Вопрос:

Я создал пользовательский CalendarView, который выглядит следующим образом:

введите описание изображения здесь

Я хочу, чтобы все прошедшие дни были другого цвета.

Мой XML:

 <CalendarView
    android:id="@ id/cv_Calendar"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="16dp"
    android:background="@drawable/cv_background"
    android:dateTextAppearance="@style/CalenderViewDateCustomText"
    android:theme="@style/CalenderViewCustom"
    android:weekDayTextAppearance="@style/CalenderViewWeekCustomText"
    app:layout_constraintTop_toBottomOf="@ id/tv_With" />
  

И мои стили:

 <style name="CalenderViewCustom" parent="Theme.AppCompat">
    <item name="colorAccent">@color/colorLightGray</item>
    <item name="colorPrimary">@color/colorLightPurple</item>
    <item name="android:textColorPrimary">@color/colorGrayText</item>
</style>

<style name="CalenderViewDateCustomText" parent="android:TextAppearance.Holo.Small">
    <item name="android:textColor">@color/colorLightPurple</item>
    <item name="android:weekNumberColor">@color/colorLightPurple</item>
</style>

<style name="CalenderViewWeekCustomText" parent="android:TextAppearance.DeviceDefault.Small">
    <item name="android:textColor">@color/colorLightPurple</item>
</style>
  

Я установил минимальную дату программно:

 calendarView = findViewById( R.id.cv_Calendar );
calendarView.setMinDate( System.currentTimeMillis() );
calendarView.setOnDateChangeListener( (arg0, year, month, date) -> {
    GregorianCalendar cal = new GregorianCalendar( year, month, date );
    dateInMillis = cal.getTimeInMillis();
} );
  

Есть идеи, как изменить цвет?

Спасибо

Комментарии:

1. Это невозможно сделать, кроме как установив минимальную дату, но тогда даты не будут выбираться.

2. Я не возражаю, чтобы их нельзя было выбрать, я просто хочу, чтобы пользователь знал, что их нельзя выбрать.

3. calendarView.setMinDate(System.currentTimeMillis())

Ответ №1:

Я не уверен, что вам все еще нужен ответ на этот вопрос, но на случай, если кто-нибудь еще столкнется с этим вопросом, вот как вы это делаете:

По сути, вам нужно изменить textColor атрибут, который вы используете для ссылки на селектор, который должен выглядеть следующим образом:

selectorDateTextColor.xml
 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        
    <!-- The color used by the disabled dates (i.e. everything outside the range you set with minDate and maxDate) -->
    <item android:color="@color/gray" android:state_enabled="false" />
    
    <!-- The color used by everything else -->
    <item android:color="@color/colorLightPurple" />
</selector>
  

И ваш стиль был бы:

 <style name="CalenderViewDateCustomText" parent="android:TextAppearance.Holo.Small">
    <item name="android:textColor">@color/selectorDateTextColor</item>
    <item name="android:weekNumberColor">@color/colorLightPurple</item>
</style>
  

Вы также можете добавить дополнительные состояния, такие android:state_activated="true" как изменение цвета текста даты, выбранной пользователем.

И если вы хотите изменить цвет круга вокруг выбранной даты, вам следует добавить его <item name="colorControlActivated">@color/blue</item> в тему, используемую вашим CalendarView .