CompactCalendarView ist eine einfache Kalenderansicht, die das Scrollen zwischen Monaten ermöglicht. Es basiert auf den Datums- und Kalenderklassen von Java. Es bietet eine einfache API zum Abfragen von Daten und Zuhörern für bestimmte Ereignisse. Zum Beispiel, wenn der Kalender zu einem neuen Monat gescrollt hat oder ein Tag ausgewählt wurde. Noch in aktiver Entwicklung.
Bitte sprechen Sie ein Problem mit der Anforderung an, damit eine Diskussion stattfinden kann, bevor Code geschrieben wird, auch wenn Sie beabsichtigen, eine Pull-Anfrage zu stellen. Bitte sehen Sie sich zum Testen das Setup an.
CompactCalendarView nutzt Screenshot-Tests für Android (https://github.com/facebook/screenshot-tests-for-android). Dies dient zum Testen der Benutzeroberfläche. Da Screenshot-Tests für Android Screenshots erstellt, benötigen wir eine Möglichkeit, sicherzustellen, dass Bilder konsistent reproduziert werden können. Hierzu wird ein spezieller Emulator zum Ausführen von Tests verwendet. Leider wird derzeit ein älterer Emulator verwendet. Neue Pull-Requests, die die Funktionalität in gewisser Weise ändern, sollten nach Möglichkeit darauf abzielen, neue Screenshot-Tests oder Unit-Tests zu erstellen. Um dies lokal auszuführen, führen Sie die folgenden Befehle aus:
Voraussetzung (siehe auch .travis.yml):
Der Android 19-Emulator wird verwendet, weil er auf Travis-CI schnell genug zu sein scheint und weil x86-Emulatoren auf Travis-CI nicht unterstützt werden. Eine neuere Android-Version ist möglich, aber die Build-Zeiten werden sich verlängern.
Installieren Sie das ABI und akzeptieren Sie:
$ $ANDROID_HOME /tools/bin/sdkmanager ' system-images;android-22;default;armeabi-v7a '
Erstellen Sie den Emulator:
$ echo no | $ANDROID_HOME /tools/bin/avdmanager create avd --force -n testCompactCalendarEmulator -k " system-images;android-22;default;armeabi-v7a "
SD-Karte erstellen (im aktuellen Verzeichnis erstellen): Alle Probleme mit der SD-Karte lassen sich am besten lösen, indem Sie sie löschen und es erneut versuchen
$ mksdcard -l sdcard 100M sdcard
Führen Sie den Emulator aus (ohne Audio und Fenster):
$ $ANDROID_HOME /emulator/emulator -avd testCompactCalendarEmulator -no-audio -no-window -sdcard sdcard &
Führen Sie den Emulator aus und schauen Sie sich Folgendes an (mit Audio und Fenster):
$ $ANDROID_HOME /emulator/emulator -avd testCompactCalendarEmulator -sdcard sdcard
Führen Sie die Tests aus, um zu überprüfen, ob die aktuellen Tests erfolgreich sind, und um zu überprüfen, welche Tests nicht denselben Screenshot erzeugen:
$ ./gradlew verifyMode screenshotTests
So erstellen Sie neue Screenshots, wenn neue Tests hinzugefügt wurden:
$ ./gradlew recordMode screenshotTests
Führen Sie die Unit-Tests wie folgt aus:
$ ./gradlew test
Es ist möglich, mit dem Android Studio-Emulator zu testen. Es muss jedoch Android 19 und eine Bildschirmauflösung von 480 x 800 sein. Ein Beispiel ist der Nexus S-Emulator. Starten Sie einfach den Emulator und führen Sie die Gradle-Befehle aus, um die Tests auszuführen. Der Emulator sollte automatisch gefunden werden.
Die Bibliothek unterstützt das Öffnen/Schließen mit oder ohne Animationen.
Über einige Eigenschaften ist es möglich, das Erscheinungsbild der Ansicht zu ändern. Dazu gehören die Hintergrundfarbe, die Textfarbe, die Textgrößenfarbe des aktuellen Tages und die Farbe des ersten Tages des Monats.
< 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 "
/>
Ein vollständiges Beispiel finden Sie unter Beispiel-App.
// ... 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 );
}
});
}
Sie können Indikatoren mithilfe einer Voreinstellung von Stilen ändern. Unten sehen Sie ein Beispiel. Es sind jedoch auch einige andere Kombinationen möglich:
Beachten Sie, dass der Kalender keinen Versuch unternimmt, Ereignisse für genau dieselbe DateTime zu deduplizieren. Dies ist etwas, mit dem Sie selbst umgehen müssen, wenn es für Ihren Anwendungsfall wichtig ist.
Es ist möglich, das Gebietsschema so festzulegen, dass die Spaltennamen für Wochentage automatisch vom Kalender festgelegt werden.
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.