CompactCalendarView는 월 간 스크롤을 제공하는 간단한 달력 보기입니다. 이는 Java의 Date 및 Calendar 클래스를 기반으로 합니다. 특정 이벤트에 대한 날짜와 리스너를 쿼리하는 간단한 API를 제공합니다. 예를 들어 달력이 새 달로 스크롤되었거나 날짜가 선택된 경우입니다. 아직 활발하게 개발 중입니다.
풀 요청을 제기하려는 경우에도 코드가 작성되기 전에 논의가 진행될 수 있도록 요구 사항 문제를 제기하십시오. 테스트를 위한 설정을 참조하세요.
CompactCalendarView는 스크린샷-테스트-for-android(https://github.com/facebook/screenshot-tests-for-android)를 사용합니다. UI 테스트용입니다. 스크린샷 테스트는 스크린샷을 찍기 때문에 이미지가 일관되게 재현될 수 있도록 하는 방법이 필요합니다. 이를 위해 특정 에뮬레이터를 사용하여 테스트를 실행합니다. 불행히도 현재는 오래된 에뮬레이터가 사용됩니다. 기능을 변경하는 새로운 풀 요청은 가능한 경우 새로운 스크린샷 테스트 또는 단위 테스트를 만드는 것을 목표로 해야 합니다. 이를 로컬로 실행하려면 아래 명령을 실행하십시오.
전제 조건(.travis.yml도 참조):
Android 19 에뮬레이터는 travis-ci에서 충분히 빠른 것 같고 x86 에뮬레이터가 travis-ci에서 지원되지 않기 때문에 사용됩니다. 최신 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 카드 만들기(현재 디렉토리에 만들기): sdcard 관련 문제는 삭제하고 다시 시도하면 가장 잘 해결됩니다.
$ 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 19 및 480x800 화면 해상도여야 합니다. 한 가지 예는 Nexus S 에뮬레이터입니다. 에뮬레이터를 시작하고 gradle 명령을 실행하여 테스트를 실행하면 됩니다. 에뮬레이터는 자동으로 검색됩니다.
라이브러리는 애니메이션 유무에 관계없이 열기/닫기를 지원합니다.
몇 가지 속성을 통해 뷰의 모양을 변경할 수 있습니다. 여기에는 배경색, 텍스트 색상, 현재 날짜의 텍스트 크기 색상 및 해당 월의 1일 색상이 포함됩니다.
< 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 );
}
});
}
아래의 예는 사전 설정된 스타일을 사용하여 표시기를 수정할 수 있지만 다른 조합도 거의 가능하지 않습니다.
달력은 정확히 동일한 DateTime에 대해 중복된 이벤트를 제거하려고 시도하지 않습니다. 이는 사용 사례에 중요한 경우 스스로 처리해야 하는 것입니다.
달력에 의해 요일 열 이름이 자동으로 설정되도록 로케일을 설정할 수 있습니다.
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.