CompactCalendarView は、月間のスクロールを提供するシンプルなカレンダー ビューです。これは Java の Date クラスと Calendar クラスに基づいています。特定のイベントの日付とリスナーをクエリするためのシンプルな API を提供します。たとえば、カレンダーが新しい月にスクロールしたとき、または日が選択されたときなどです。まだ活発に開発中です。
プル リクエストを提起するつもりであっても、コードを記述する前に議論できるように、要件の問題を提起してください。テスト用のセットアップを参照してください。
CompactCalendarView は、screenshot-tests-for-android (https://github.com/facebook/screenshot-tests-for-android) を利用します。これは UI テスト用です。 Screenshots-tests-for-android はスクリーンショットを取得するため、画像を一貫して再現できるようにする方法が必要です。これを行うには、特定のエミュレータを使用してテストを実行します。残念ながら、現在は古いエミュレータが使用されています。機能を何らかの方法で変更する新しいプル リクエストは、可能であれば新しいスクリーンショット テストまたは単体テストの作成を目指す必要があります。これをローカルで実行するには、以下のコマンドを実行します。
前提条件 (.travis.yml も参照):
Android 19 エミュレータが使用されているのは、travis-ci では十分に高速であると思われることと、travis-ci では x86 エミュレータがサポートされていないためです。新しい Android バージョンも可能ですが、ビルド時間が長くなります。
abi をインストールし、次の内容を受け入れます。
$ $ANDROID_HOME /tools/bin/sdkmanager ' system-images;android-22;default;armeabi-v7a '
エミュレータを作成します。
$ echo no | $ANDROID_HOME /tools/bin/avdmanager create avd --force -n testCompactCalendarEmulator -k " system-images;android-22;default;armeabi-v7a "
SD カードの作成 (現在のディレクトリに作成): SD カードに関する問題は、削除して再試行することで最もよく解決されます。
$ mksdcard -l sdcard 100M sdcard
エミュレータを実行します (オーディオとウィンドウなし):
$ $ANDROID_HOME /emulator/emulator -avd testCompactCalendarEmulator -no-audio -no-window -sdcard sdcard &
エミュレータを実行して監視します (音声とウィンドウ付き):
$ $ANDROID_HOME /emulator/emulator -avd testCompactCalendarEmulator -sdcard sdcard
テストを実行して、現在のテストが合格することを確認し、どのテストが同じスクリーンショットを生成していないかを確認します。
$ ./gradlew verifyMode screenshotTests
新しいテストが追加された場合に新しいスクリーンショットを生成するには:
$ ./gradlew recordMode screenshotTests
以下のように単体テストを実行します。
$ ./gradlew test
Android Studioのエミュレータを使用してテストすることが可能です。ただし、Android 19 および 480x800 の画面解像度である必要があります。一例として、Nexus S エミュレータがあります。エミュレータを起動し、gradle コマンドを実行してテストを実行するだけです。エミュレータは自動的に見つかるはずです。
このライブラリは、アニメーションの有無にかかわらず開閉をサポートします。
いくつかのプロパティを使用してビューの外観を変更できます。これには、現在の日の背景色、テキストの色、テキストサイズの色、および月の最初の日の色が含まれます。
< com .github.sundeepk.compactcalendarview.CompactCalendarView
xmlns : app = " http://schemas.android.com/apk/res-auto "
android : id = " @+id/compactcalendar_view "
android : layout_width = " fill_parent "
android : paddingRight = " 10dp "
android : paddingLeft = " 10dp "
android : layout_height = " 250dp "
app : compactCalendarTargetHeight = " 250dp "
app : compactCalendarTextSize = " 12sp "
app : compactCalendarBackgroundColor = " #ffe95451 "
app : compactCalendarTextColor = " #fff "
app : compactCalendarCurrentSelectedDayBackgroundColor = " #E57373 "
app : compactCalendarCurrentDayBackgroundColor = " #B71C1C "
app : compactCalendarMultiEventIndicatorColor = " #fff "
/>
完全な例については、サンプル アプリを参照してください。
// ... code omitted for brevity
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
final CompactCalendarView compactCalendarView = ( CompactCalendarView ) findViewById ( R . id . compactcalendar_view );
// Set first day of week to Monday, defaults to Monday so calling setFirstDayOfWeek is not necessary
// Use constants provided by Java Calendar class
compactCalendarView . setFirstDayOfWeek ( Calendar . MONDAY );
// Add event 1 on Sun, 07 Jun 2015 18:20:51 GMT
Event ev1 = new Event ( Color . GREEN , 1433701251000L , "Some extra data that I want to store." );
compactCalendar . addEvent ( ev1 );
// Added event 2 GMT: Sun, 07 Jun 2015 19:10:51 GMT
Event ev2 = new Event ( Color . GREEN , 1433704251000L );
compactCalendar . addEvent ( ev2 );
// Query for events on Sun, 07 Jun 2015 GMT.
// Time is not relevant when querying for events, since events are returned by day.
// So you can pass in any arbitary DateTime and you will receive all events for that day.
List < Event > events = compactCalendar . getEvents ( 1433701251000L ); // can also take a Date object
// events has size 2 with the 2 events inserted previously
Log . d ( TAG , "Events: " + events );
// define a listener to receive callbacks when certain events happen.
compactCalendarView . setListener ( new CompactCalendarView . CompactCalendarViewListener () {
@ Override
public void onDayClick ( Date dateClicked ) {
List < Event > events = compactCalendarView . getEvents ( dateClicked );
Log . d ( TAG , "Day was clicked: " + dateClicked + " with events " + events );
}
@ Override
public void onMonthScroll ( Date firstDayOfNewMonth ) {
Log . d ( TAG , "Month was scrolled to: " + firstDayOfNewMonth );
}
});
}
スタイルのプリセットを使用してインジケーターを変更できます。以下に例を示しますが、他のいくつかの組み合わせも可能です。
カレンダーは、まったく同じ日時のイベントの重複を排除しようとしないことに注意してください。これは、ユースケースにとって重要な場合には、自分で対処する必要があります。
曜日の列名がカレンダーによって自動的に設定されるようにロケールを設定することができます。
CompactCalendarView compactCalendarView = ( CompactCalendarView ) findViewById ( R . id . compactcalendar_view );
compactCalendarView . setLocale ( Locale . CHINESE );
compactCalendarView . setUseThreeLetterAbbreviation ( true );
dependencies {
compile ' com.github.sundeepk:compact-calendar-view:3.0.0 '
}
The MIT License (MIT)
Copyright (c) [2018] [Sundeepk]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.