CompactCalendarView — это простой вид календаря, обеспечивающий прокрутку между месяцами. Он основан на Java-классах Date и Calendar. Он предоставляет простой API для запроса дат и прослушивателей определенных событий. Например, когда календарь прокрутился до нового месяца или был выбран день. Все еще находится в активной разработке.
Пожалуйста, поднимите вопрос о требовании, чтобы можно было обсудить его до написания любого кода, даже если вы собираетесь подать запрос на включение. Пожалуйста, ознакомьтесь с настройками для тестирования.
CompactCalendarView использует скриншоты-тесты для Android (https://github.com/facebook/screenshot-tests-for-android). Это для тестирования пользовательского интерфейса. Поскольку скриншот-тесты-для-андроида делают снимки экрана, нам нужен способ обеспечить последовательное воспроизведение изображений. Для этого используется специальный эмулятор для запуска тестов. К сожалению, сейчас используется более старый эмулятор. Новые запросы на включение, которые каким-то образом меняют функциональность, должны быть направлены на создание новых скриншотов или модульных тестов, если это возможно. Чтобы запустить это локально, выполните следующие команды:
Предварительные условия (также см. .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-карту (создание в текущем каталоге). Любые проблемы с 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. Однако это должен быть 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 );
}
});
}
Вы можете изменять индикаторы, используя предустановленные стили (ниже приведен пример), но возможны и другие комбинации:
Обратите внимание, что календарь не пытается дедуплицировать события для одного и того же 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.