#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
.