Appintro ist eine Android -Bibliothek, mit der Sie ein cooles Karussell -Intro für Ihre App erstellen können. AppinTro hat Unterstützung für die Anforderung von Berechtigungen und hilft Ihnen dabei, in nur wenigen Minuten ein großartiges Onboarding -Erlebnis zu erstellen.


AppinTro wird über Jitpack verteilt.
Um dies zu verwenden, müssen Sie Ihrem build.gradle -Datei des Moduls die folgende Abhängigkeit von Gradle hinzufügen, in der Sie AppIntro (nicht die Root -Datei) verwenden möchten.
repositories {
maven { url " https://jitpack.io " }
}dependencies {
// AndroidX Capable version
implementation ' com.github.AppIntro:AppIntro:6.3.1 '
// *** OR ***
// Latest version compatible with the old Support Library
implementation ' com.github.AppIntro:AppIntro:4.2.3 '
}Bitte beachten Sie, dass die Bibliothek seit AppIntro 5.x Android X unterstützt. Wenn Sie noch nicht migriert haben, möchten Sie wahrscheinlich eine frühere Version der Bibliothek verwenden, die die alten Support -Bibliothekspakete verwendet (oder den Jetifier -Revers -Modus probieren).
Um AppinTro zu verwenden, müssen Sie lediglich eine neue Aktivität erstellen, die Appintro so erweitert wie die folgenden:
class MyCustomAppIntro : AppIntro () {
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
// Make sure you don't call setContentView!
// Call addSlide passing your Fragments.
// You can use AppIntroFragment to use a pre-built fragment
addSlide( AppIntroFragment .createInstance(
title = " Welcome... " ,
description = " This is the first slide of the example "
))
addSlide( AppIntroFragment .createInstance(
title = " ...Let's get started! " ,
description = " This is the last slide, I won't annoy you more :) "
))
}
override fun onSkipPressed ( currentFragment : Fragment ? ) {
super .onSkipPressed(currentFragment)
// Decide what to do when the user clicks on "Skip"
finish()
}
override fun onDonePressed ( currentFragment : Fragment ? ) {
super .onDonePressed(currentFragment)
// Decide what to do when the user clicks on "Done"
finish()
}
} Bitte beachten Sie, dass Sie SetContentView nicht aufrufen dürfen . Die AppIntro -Superklasse kümmert sich für Sie darum.
Bestätigen Sie auch, dass Sie stattdessen eine andere Überschreibung (wie onCreate(Bundle, PersistableBundle) ) mit einem einzelnen Parameter ( Bundle ) onCreate und keine andere Überschreibung verwenden.
Erklären Sie schließlich die Aktivität in Ihrem Manifest so:
< activity android : name = " com.example.MyCustomAppIntro "
android : label = " My Custom AppIntro " /> Wir empfehlen, MyCustomAppIntro nicht als Ihre erste Aktivität zu erklären, es sei denn, Sie möchten, dass das Intro jedes Mal, wenn Ihre App startet. Im Idealfall sollten Sie dem Benutzer die AppinTro -Aktivität nur einmal anzeigen und nach Abschluss ausblenden (Sie können ein Flag in den SharedPreferences verwenden).
Sie können viele Beispiele in der Java -Sprache im Beispielverzeichnis finden
Wenn Sie von AppIntro v5.x bis v6.x migrieren, erwarten Sie bitte mehrere Bruchänderungen. Sie finden eine Dokumentation, wie Sie Ihren Code auf diesem anderen Migrationshandbuch aktualisieren.
Vergessen Sie nicht, den ChangeLog zu überprüfen, um sich alle Änderungen in der neuesten Version von AppIntro anzusehen.
Der Einstiegspunkt zum Hinzufügen einer neuen Folie ist die Funktion addSlide(fragment: Fragment) in der AppIntro -Klasse. Sie können es leicht verwenden, um dem Karussell ein neues Fragment hinzuzufügen.
Die Bibliothek verfügt über mehrere Util -Kurse, mit denen Sie Ihre Folie mit nur ein paar Zeilen erstellen können:
AppIntroFragment Sie können das AppIntroFragment verwenden, wenn Sie nur Titel, Beschreibung, Bild und Farben anpassen möchten. Dies ist der empfohlene Ansatz, wenn Sie ein kurzes Intro erstellen möchten:
addSlide( AppIntroFragment .createInstance(
title = " The title of your slide " ,
description = " A description that will be shown on the bottom " ,
imageDrawable = R .drawable.the_central_icon,
backgroundDrawable = R .drawable.the_background_image,
titleColorRes = R .color.yellow,
descriptionColorRes = R .color.red,
backgroundColorRes = R .color.blue,
titleTypefaceFontRes = R .font.opensans_regular,
descriptionTypefaceFontRes = R .font.opensans_regular,
))Alle Parameter sind optional, sodass Sie Ihre Folie nach Belieben anpassen können.
Wenn Sie programmgesteuert mehrere Folien erstellen müssen, können Sie auch die SliderPage -Klasse verwenden. Diese Klasse kann an AppIntroFragment.createInstance(sliderPage: SliderPage) übergeben werden, die eine neue Folie erzeugt, die von dieser Instanz beginnt.
AppIntroCustomLayoutFragment Wenn Sie die Anpassung Ihrer Folie weitere Kontrolle benötigen, können Sie die AppIntroCustomLayoutFragment verwenden. Auf diese Weise können Sie Ihre benutzerdefinierte Layout -Ressourcendatei übergeben:
AppIntroCustomLayoutFragment .newInstance( R .layout.intro_custom_layout1)Auf diese Weise können Sie ein komplexes Layout erreichen und Ihre benutzerdefinierte Logik in das Intro einbeziehen (siehe auch Slide -Richtlinie):

AppIntro bietet mehrere Konfigurationsoptionen, mit denen Sie Ihr Onboarding -Erlebnis anpassen können.
AppinTro verfügt über einen Satz von Folientransformator , den Sie für die Box verwenden können, um Ihren Folienübergang zu animieren.
| Schleiftransformatoren | Schleiftransformatoren |
|---|---|
Verblassen ![]() | Zoom ![]() |
Fließen ![]() | Umschieben ![]() |
Tiefe ![]() | Parallaxe ![]() |
Sie können setTransformer() einfach aufrufen und eine der Unterklassen der versiegelten Klasse AppIntroPageTransformerType übergeben:
setTransformer( AppIntroPageTransformerType . Fade )
setTransformer( AppIntroPageTransformerType . Zoom )
setTransformer( AppIntroPageTransformerType . Flow )
setTransformer( AppIntroPageTransformerType . SlideOver )
setTransformer( AppIntroPageTransformerType . Depth )
// You can customize your parallax parameters in the constructors.
setTransformer( AppIntroPageTransformerType . Parallax (
titleParallaxFactor = 1.0 ,
imageParallaxFactor = - 1.0 ,
descriptionParallaxFactor = 2.0
)) Sie können auch Ihren benutzerdefinierten Folientransformator angeben (implementieren Sie die Schnittstelle ViewPager.PageTransformer ) mit:
setCustomTransformer( ViewPager . PageTransformer )
Appintro bietet die Möglichkeit, den Farbübergang zwischen zwei Folienhintergrund zu animieren. Diese Funktion ist standardmäßig deaktiviert, und Sie müssen sie in Ihrem AppIntro aktivieren mit:
isColorTransitionsEnabled = true Sobald Sie es aktiviert haben, wird die Farbe zwischen Folien mit einem Gradienten animiert. Stellen Sie sicher, dass Sie in Ihren Folien einen backgroundColor -Parameter angeben.
Wenn Sie benutzerdefinierte Fragmente anbieten, können Sie den Farbübergang unterstützen, indem Sie die SlideBackgroundColorHolder -Schnittstelle implementieren.
AppinTro wird mit zwei Layouts auf oberster Ebene versendet, die Sie verwenden können. Das Standardlayout ( AppIntro ) verfügt über Textschaltflächen, während das alternative Layout Schaltflächen mit Symbolen enthält.
Um das Fensterlayout zu ändern, können Sie einfach Ihre Superklasse in AppIntro2 ändern. Die Methoden zum Hinzufügen und Anpassen des AppIntro sind unverändert.
class MyCustomAppIntro : AppIntro2 () {
// Same code as displayed in the `Basic Usage` section of this README
}| Seite | AppIntro | AppIntro2 |
|---|---|---|
| Standardseite | ![]() | ![]() |
| letzte Seite | ![]() | ![]() |
AppIntro unterstützt zwei Indikatoren außerhalb des Box, um dem Benutzer den Fortschritt der Intro -Erfahrung anzuzeigen:
DotIndicatorController wird mit einer Liste von Punkten dargestellt (der Standard)ProgressIndicatorController wird mit einer Fortschrittsbalken dargestellt. DotIndicator | ProgressIndicator |
|---|---|
![]() | ![]() |
Darüber hinaus können Sie Ihren eigenen Indikator anbieten, indem Sie eine Implementierung der IndicatorController -Schnittstelle bereitstellen.
Sie können den Indikator mit der folgenden API in der AppIntro -Klasse anpassen:
// Toggle Indicator Visibility
isIndicatorEnabled = true
// Change Indicator Color
setIndicatorColor(
selectedIndicatorColor = getColor( R .color.red),
unselectedIndicatorColor = getColor( R .color.blue)
)
// Switch from Dotted Indicator to Progress Indicator
setProgressIndicator()
// Supply your custom `IndicatorController` implementation
indicatorController = MyCustomIndicator ( /* initialize me */ ) Wenn Sie keine Anpassung angeben, wird ein DotIndicatorController angezeigt.
AppIntro unterstützt die Bereitstellung von Feedback für haptische Schwingung bei Schaltflächenklicks. Bitte beachten Sie, dass Sie die Vibrationsberechtigung in Ihrem App -Manifest angeben müssen (die Bibliothek tut dies nicht). Wenn Sie vergessen, die Erlaubnis anzugeben, erlebt die App einen Absturz.
< uses-permission android : name = " android.permission.VIBRATE " />Sie können die Vibration aktivieren und anpassen mit:
// Enable vibration and set duration in ms
isVibrate = true
vibrateDuration = 50L

AppIntro unterstützt einen Assistentenmodus , in dem die Skip -Taste durch den hinteren Pfeil ersetzt wird. Dies ist praktisch, wenn Sie Ihren Benutzern einen Assistenten mit einer Reihe von Schritten präsentieren, die sie ausführen müssen, und sie könnten häufig hin und her gehen.
Sie können es aktivieren mit:
isWizardMode = true

Wenn Sie Ihr Intro mit einem Vollbild -Erlebnis anzeigen möchten, können Sie den immersiven Modus aktivieren. Dadurch wird sowohl die Statusleiste als auch die Navigationsleiste ausgeblendet, und der Benutzer muss von oben auf dem Bildschirm scrollen, um sie erneut anzuzeigen.
Auf diese Weise können Sie mehr Platz für Ihren Intro -Inhalt und Ihre Grafiken haben.
Sie können es aktivieren mit:
setImmersiveMode()Sie können den System zurück sperren, wenn Sie nicht möchten, dass Ihr Benutzer von Intro zurückgeht. Dies kann nützlich sein, wenn Sie die Erlaubnis anfordern müssen und die Intro -Erfahrung nicht optional ist.
Wenn dies der Fall ist, setzen Sie bitte die folgende Flagge auf die folgende Flagge:
isSystemBackButtonLocked = true
Sie können die Statusleiste und die Navigationsleiste -Sichtbarkeit und -farbe mit den folgenden Methoden anpassen:
// Hide/Show the status Bar
showStatusBar( true )
// Control the status bar color
setStatusBarColor( Color . GREEN )
setStatusBarColorRes( R .color.green)
// Control the navigation bar color
setNavBarColor( Color . RED )
setNavBarColorRes( R .color.red) Standardmäßig verwenden die Folien die gesamte im Bildschirm verfügbare Größe, sodass der untere Balken den Inhalt der Folie überlappt, wenn Sie die Hintergrundfarbe auf eine nicht-transparente Person gesetzt haben. Wenn Sie sicherstellen möchten, dass die Balken den Inhalt nicht überlappt, verwenden Sie die setBarMargin -Funktion wie folgt:
setBarMargin( true )
AppIntro vereinfacht den Prozess der Anforderung von Laufzeitberechtigungen an Ihren Benutzer. Sie können eine oder mehrere Berechtigungsanforderungen in eine Folie in die askForPermissions -Methode in Ihre Aktivität integrieren.
Bitte beachten Sie::
slideNumber befindet sich in einer einbasierten Nummerierung (sie beginnt ab 1) // Ask for required CAMERA permission on the second slide.
askForPermissions(
permissions = arrayOf( Manifest .permission. CAMERA ),
slideNumber = 2 ,
required = true )
// Ask for both optional ACCESS_FINE_LOCATION and WRITE_EXTERNAL_STORAGE
// permission on the third slide.
askForPermissions(
permissions = arrayOf(
Manifest .permission. ACCESS_FINE_LOCATION ,
Manifest .permission. WRITE_EXTERNAL_STORAGE
),
slideNumber = 3 ,
required = false ) Wenn Sie die Berechtigungsanforderung weitere Kontrolle benötigen, können Sie diese beiden Methoden in der AppIntro -Klasse überschreiben:
override fun onUserDeniedPermission ( permissionName : String ) {
// User pressed "Deny" on the permission dialog
}
override fun onUserDisabledPermission ( permissionName : String ) {
// User pressed "Deny" + "Don't ask again" on the permission dialog
} Wenn Sie die Navigation zwischen Ihren Folien einschränken möchten (dh der Benutzer muss ein Kontrollkästchen umschalten, um fortzufahren), hilft Ihnen die SlidePolicy -Funktion möglicherweise.
Alles, was Sie tun müssen, ist SlidePolicy in Ihren Folien zu implementieren.
Diese Schnittstelle enthält die isPolicyRespected -Eigenschaft und die methodie, die Sie mit Ihrer onUserIllegallyRequestedNextPage Logik implementieren müssen
class MyFragment : Fragment (), SlidePolicy {
// If user should be allowed to leave this slide
override val isPolicyRespected : Boolean
get() = false // Your custom logic here.
override fun onUserIllegallyRequestedNextPage () {
// User illegally requested next slide.
// Show a toast or an informative message to the user.
}
} In der Beispiel -App - CustomSlidePolicyFragment.kt finden Sie ein vollständiges Arbeitsbeispiel für SlidePolicy
Appintro verfügt über eine Beispiel -App mit Beispielen und Anwendungsfall, die Sie als Inspiration für Ihr Projekt verwenden können. Sie finden es im Ordner /Beispiel.
Sie können hier eine Debug -APK der Beispiel -App aus dem Pre Merge Github Actions -Job als Ausgangsartefakt erhalten.

Möchten Sie Appintro helfen, international zu werden? Wir sind mehr als glücklich! Appintro unterstützt derzeit die folgenden Sprachen.
So fügen Sie eine neue Übersetzung hinzu, fügen Sie einfach eine Pull-Anforderung mit einer neuen strings.xml Datei in einem values-xx Ordner hinzu (wobei xx ein Sprachcode mit zwei Buchstaben ISO 639-1 ist).
Um die Übersetzung bereitzustellen, muss Ihre Datei die folgenden Zeichenfolgen enthalten:
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< resources xmlns : tools = " http://schemas.android.com/tools " >
< string name = " app_intro_skip_button " >[Translation for SKIP]</ string >
< string name = " app_intro_next_button " >[Translation for NEXT]</ string >
< string name = " app_intro_back_button " >[Translation for BACK]</ string >
< string name = " app_intro_done_button " >[Translation for DONE]</ string >
< string name = " app_intro_image_content_description " >[Translation for "graphics"]</ string >
</ resources >Eine aktualisierte Version der englischen Versionsübersetzung ist hier verfügbar.
Wenn eine Übersetzung in Ihrer Sprache bereits verfügbar ist, überprüfen Sie sie bitte und beheben Sie sie schließlich (alle Zeichenfolgen sollten nicht nur eine Teilmenge aufgeführt werden).
Die Entwicklung von AppinTro findet in der Hauptzweigung statt. Sie können bei Bedarf SNAPSHOT -Versionen direkt von Jitpack erhalten.
repositories {
maven { url " https://jitpack.io " }
} dependencies {
implementation " com.github.AppIntro:AppIntro:main-SNAPSHOT "
}Wir bieten AppIntro auf dem #AppinTro -Kanal auf Kotlinlang Slack. Komm und schließe dich dem Gespräch dort an. Wenn Sie keinen Zugriff auf Kotlinlang Slack haben, können Sie hier Zugriff anfordern.
Wir suchen nach Mitwirkenden! Sei nicht schüchtern. ? Fühlen Sie sich frei, Probleme zu öffnen/Anfragen zu ziehen, die mir helfen, dieses Projekt zu verbessern.
Appintro wird derzeit von der AppinTro Github Org entwickelt und verwaltet. Wenn Sie eine neue PR einreichen, pingen Sie bitte einen von:
Appintro verlässt sich nicht auf andere Bibliothek als die von Androidx:
androidx.appcompat:appcompatandroidx.annotation:annotationandroidx.constraintlayout:constraintlayout Copyright (C) 2015-2020 AppIntro Developers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Wenn Sie AppIntro in Ihrer App verwenden und hier aufgelistet sein möchten, öffnen Sie bitte eine Pull -Anfrage und wir können Sie mehr als gerne einschließen: