web-dev-qa-db-fra.com

Changer le style de CalendarView

J'essaie d'ajouter un CalendarView dans mon application, qui utilise le thème Theme.Light. Le problème est que les nombres de jours de ce calendrier sont affichés en blanc, donc lorsque vous utilisez un thème clair, vous ne pouvez pas les voir.

En ce moment, j'ai le code suivant dans mon fichier de disposition XML:

<CalendarView
    Android:id="@+id/calendar1"
    Android:layout_width="500dp"
    Android:layout_height="300dp"/>

J'ai essayé de forcer le thème du calendrier comme ceci:

<CalendarView
    Android:id="@+id/calendar1"
    Android:layout_width="500dp"
    Android:layout_height="300dp"
    Android:theme="@Android:style/Theme.Light" />

Mais cela ne change rien. Je pense que je devrais faire quelque chose avec la propriété Android: dateTextAppearance, j'ai donc essayé ceci:

<CalendarView
    Android:id="@+id/calendar1"
    Android:layout_width="500dp"
    Android:layout_height="300dp"
    Android:dateTextAppearance="@Android:style/TextAppearance.Large.Inverse" />

mais ça ne fait rien non plus.

Des idées ?

Merci !

14
personne3000

Dans mon projet, j'ai défini l'attribut "Android: calendarViewStyle" dans mon thème.

<style name="Theme.Custom" parent="@Android:Theme">
  <item name="Android:calendarViewStyle">@style/Widget.CalendarView.Custom</item>
</style>

<style name="Widget.CalendarView.Custom" parent="Android:Widget.CalendarView">
    <item name="Android:focusedMonthDateColor">@color/cs_textcolor</item>
    <item name="Android:weekNumberColor">@color/red</item>
    <item name="Android:weekDayTextAppearance">@style/TextAppearance.Medium</item>
    <item name="Android:dateTextAppearance">@style/TextAppearance.Medium</item>
</style>

Toutes les possibilités de styles sont:

  • @attr ref Android.R.styleable # CalendarView_showWeekNumber
  • @attr ref Android.R.styleable # CalendarView_firstDayOfWeek
  • @attr ref Android.R.styleable # CalendarView_minDate
  • @attr ref Android.R.styleable # CalendarView_maxDate
  • @attr ref Android.R.styleable # CalendarView_shownWeekCount
  • @attr ref Android.R.styleable # CalendarView_selectedWeekBackgroundColor
  • @attr ref Android.R.styleable # CalendarView_focusedMonthDateColor
  • @attr ref Android.R.styleable # CalendarView_unfocusedMonthDateColor
  • @attr ref Android.R.styleable # CalendarView_weekNumberColor
  • @attr ref Android.R.styleable # CalendarView_weekSeparatorLineColor
  • @attr ref Android.R.styleable # CalendarView_selectedDateVerticalBar
  • @attr ref Android.R.styleable # CalendarView_weekDayTextAppearance
  • @attr ref Android.R.styleable # CalendarView_dateTextAppearance

remarque: si showWeekNumber ne fonctionne pas comme style xml, vous pouvez définir le code avec setShowWeekNumber (true).

36
i.masm

J'ai aussi eu beaucoup de mal. Bien que n'étant pas parfait, et je n'ai pas compris comment modifier chaque aspect, je me suis approché. Voici comment je l'ai fait, dans le styles.xml du projet, j'ai ajouté ces styles:

<style name="CalenderViewCustom" parent="Theme.AppCompat">
    <item name="colorAccent">@color/white_30</item>
</style>

<style name="CalenderViewDateCustomText" parent="Android:TextAppearance.DeviceDefault.Small">
    <item name="Android:textColor">@color/white</item>
</style>

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

Ensuite, pour le CalendarView, j'ai référencé ces styles comme suit:

<CalendarView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:theme="@style/CalenderViewCustom"
    Android:dateTextAppearance="@style/CalenderViewDateCustomText"
    Android:weekDayTextAppearance="@style/CalenderViewWeekCustomText"/>

Vous pouvez ajouter les autres types de couleurs (primaires/secondaires) à CalenderViewCustom ci-dessus.

8
Abushawish