アプリに Caldroid ライブラリを使用していますが、問題が発生しました。
今月の日付だけをカレンダーに表示したい。
Caldroid のドキュメントを調べましたが、何も見つかりませんでした。
カレンダーの最大日付を設定できることはわかっていますが、各月の最大/最小を設定するためのものが見つかりませんでした。
これがあなたを助けることを願っています:)
私は同じ問題を抱えていて、そのようなものを作りました。
calendar_cell_text_color.xmlなどの drawable に新しいセレクターを作成します。このファイルには、次のように sth を入れます。
<!-- Caldroid days from prev and next month -->
<item android:color="@color/white" caldroid:state_date_prev_next_month="true"/>
<!-- Caldroid days from current month -->
<item android:color="@color/black" />
ここで、 CaldroidDefaultCell のスタイルを変更する必要があります。
ファイル style.xml で、次の行に追加します。
<!-- My Caldroid theme. -->
<style name="MyCaldroid" parent="CaldroidDefault">
<!--If you use compact view in Caldroid -->
<item name="styleCaldroidNormalCell">@style/CaldroidCell</item>
<!-- If you use square (default) view in Caldroid-->
<item name="styleCaldroidSquareCell">@style/CaldroidCell</item>
</style>
<style name="CaldroidCell" parent="CaldroidDefaultCell">
<item name="android:textColor">@drawable/calendar_cell_text_color</item>
</style>
caldroid を初期化した後、yout テーマを使用するための行を追加する必要があります。
caldroidFragment = new CaldroidFragment();
caldroidFragment.setThemeResource(R.style.MyCaldroid);
他の月の日付は表示されなくなりますが、クリックすることはできます。それらを無効にする方法を理解するために現在取り組んでいます。
編集 :
日付を無効にする場合
//date argument is current month visible on screen
public void disablePrevNextMonthDay(Date date){
disableDates.setTime(date); // disableDates is a Calendar object
disableDates.set(Calendar.DAY_OF_MONTH, 1); // 1st day of current month
caldroidFragment.setMinDate(disableDates.getTime());
int maxDay = disableDates.getActualMaximum(Calendar.DAY_OF_MONTH);
disableDates.set(Calendar.DAY_OF_MONTH, maxDay);
caldroidFragment.setMaxDate(disableDates.getTime()); //last day of current month
}
そして、このメソッドを caldroid の onChangeMonth() メソッドで呼び出します。
calendar_cell_text_color.xmlと同様のファイルにセレクターstate_date_disabledを追加し、前の例のように背景を白に設定すると、テキストの色が非表示になり、クリックされていない日付が表示されます。