4

アプリに Caldroid ライブラリを使用していますが、問題が発生しました。

今月の日付だけをカレンダーに表示したい。

Caldroid のドキュメントを調べましたが、何も見つかりませんでした。

カレンダーの最大日付を設定できることはわかっていますが、各月の最大/最小を設定するためのものが見つかりませんでした。

4

1 に答える 1

5

これがあなたを助けることを願っています:)

私は同じ問題を抱えていて、そのようなものを作りました。

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を追加し、前の例のように背景を白に設定すると、テキストの色が非表示になり、クリックされていない日付が表示されます。

于 2015-10-26T11:19:54.573 に答える