Appintro est une bibliothèque Android qui vous aide à créer une intro de carrousel cool pour votre application. Appintro prend en charge la demande d'autorisations et vous aide à créer une excellente expérience d'intégration en quelques minutes.


Appintro est distribué via Jitpack.
Pour l'utiliser, vous devez ajouter la dépendance Gradle suivante à votre fichier build.gradle du module où vous souhaitez utiliser AppIntro (pas le fichier racine).
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 '
}Veuillez noter que depuis AppIntro 5.x, la bibliothèque prend en charge Android X. Si vous n'avez pas encore migré, vous souhaitez probablement utiliser une version précédente de la bibliothèque qui utilise les anciens packages de bibliothèque d'assistance (ou essayez le mode inverse de Jetitifier).
Pour utiliser AppIntro, il vous suffit de créer une nouvelle activité qui étend AppIntro comme ce qui suit:
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()
}
} Veuillez noter que vous ne devez pas appeler SetContentView. La superclasse AppIntro s'en occupe pour vous.
Confirmez également que vous remplacez onCreate avec un seul paramètre ( Bundle ) et que vous n'utilisez pas un autre remplacement (comme onCreate(Bundle, PersistableBundle) ).
Enfin, déclarez l'activité dans votre manifeste comme tel:
< activity android : name = " com.example.MyCustomAppIntro "
android : label = " My Custom AppIntro " /> Nous suggérons de ne pas déclarer MyCustomAppIntro comme première activité à moins que vous ne vouliez que l'intro soit lancé chaque fois que votre application démarre. Idéalement, vous ne devriez afficher l'activité AppIntro qu'une seule fois à l'utilisateur, et vous devriez le masquer une fois terminé (vous pouvez utiliser un drapeau dans les SharedPreferences ).
Vous pouvez trouver de nombreux exemples en langue java dans le répertoire des exemples
Si vous migrez de Appintro V5.x à V6.x , veuillez vous attendre à plusieurs modifications de rupture. Vous pouvez trouver une documentation sur la façon de mettre à jour votre code sur cet autre guide de migration.
N'oubliez pas de vérifier le Changelog pour jeter un œil à toutes les modifications de la dernière version d'Appintro.
Le point d'entrée pour ajouter une nouvelle diapositive est la fonction addSlide(fragment: Fragment) sur la classe AppIntro . Vous pouvez facilement l'utiliser pour ajouter un nouveau Fragment au carrousel.
La bibliothèque est livrée avec plusieurs cours ULL pour vous aider à créer votre diapositive avec quelques lignes:
AppIntroFragment Vous pouvez utiliser l' AppIntroFragment si vous souhaitez simplement personnaliser le titre, la description, l'image et les couleurs. C'est l'approche suggérée si vous voulez créer une intro rapide:
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,
))Tous les paramètres sont facultatifs, vous êtes donc libre de personnaliser votre diapositive comme vous le souhaitez.
Si vous devez créer par programme plusieurs diapositives, vous pouvez également utiliser la classe SliderPage . Cette classe peut être transmise à AppIntroFragment.createInstance(sliderPage: SliderPage) qui créera une nouvelle diapositive à partir de cette instance.
AppIntroCustomLayoutFragment Si vous avez besoin d'un contrôle supplémentaire sur la personnalisation de votre diapositive, vous pouvez utiliser AppIntroCustomLayoutFragment . Cela vous permettra de passer votre fichier de ressources de mise en page personnalisé:
AppIntroCustomLayoutFragment .newInstance( R .layout.intro_custom_layout1)Cela vous permet d'obtenir une disposition complexe et d'inclure votre logique personnalisée dans l'intro (voir également la stratégie de diapositive):

AppIntro propose plusieurs options de configuration pour vous aider à personnaliser votre expérience d'intégration.
Appintro est livré avec un ensemble de transformateur de diapositive que vous pouvez utiliser hors de la boîte pour animer votre transition de diapositive.
| Transformateurs de glissière | Transformateurs de glissière |
|---|---|
Disparaître ![]() | Zoom ![]() |
Couler ![]() | Glisser ![]() |
Profondeur ![]() | Parallaxe ![]() |
Vous pouvez simplement appeler setTransformer() et passer l'une des sous-classe de la classe scellée AppIntroPageTransformerType :
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
)) Vous pouvez également fournir votre transformateur de diapositive personnalisé (implémentation de l'interface ViewPager.PageTransformer ) avec:
setCustomTransformer( ViewPager . PageTransformer )
Appintro offre la possibilité d'animer la transition de couleur entre l'arrière-plan de deux diapositives. Cette fonction est désactivée par défaut, et vous devez l'activer sur votre appintro avec:
isColorTransitionsEnabled = true Une fois que vous l'avez activé, la couleur sera animée entre les diapositives avec un dégradé. Assurez-vous de fournir un paramètre backgroundColor dans vos diapositives.
Si vous fournissez des fragments personnalisés, vous pouvez les laisser prendre en charge la transition des couleurs en implémentant l'interface SlideBackgroundColorHolder .
Appintro est expédié avec deux dispositions de niveau supérieur que vous pouvez utiliser. La disposition par défaut ( AppIntro ) a des boutons textuels, tandis que la disposition alternative a des boutons avec des icônes.
Pour modifier la disposition des fenêtres, vous pouvez simplement modifier votre superclasse en AppIntro2 . Les méthodes pour ajouter et personnaliser l'apprintro sont inchangées.
class MyCustomAppIntro : AppIntro2 () {
// Same code as displayed in the `Basic Usage` section of this README
}| Page | AppIntro | AppIntro2 |
|---|---|---|
| page standard | ![]() | ![]() |
| dernière page | ![]() | ![]() |
AppIntro prend en charge deux indicateurs hors de la boîte pour montrer la progression de l'expérience d'intro à l'utilisateur:
DotIndicatorController représenté avec une liste de points (la valeur par défaut)ProgressIndicatorController représenté avec une barre de progrès. DotIndicator | ProgressIndicator |
|---|---|
![]() | ![]() |
De plus, vous pouvez fournir votre propre indicateur en fournissant une implémentation de l'interface IndicatorController .
Vous pouvez personnaliser l'indicateur avec l'API suivant sur la classe AppIntro :
// 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 */ ) Si vous ne spécifiez aucune personnalisation, un DotIndicatorController sera affiché.
Appintro prend en charge la fourniture de commentaires de vibration haptique sur les clics du bouton. Veuillez noter que vous devez spécifier l'autorisation de vibration dans votre manifeste d'application (la bibliothèque ne le fait pas). Si vous oubliez de spécifier l'autorisation, l'application connaîtra un crash.
< uses-permission android : name = " android.permission.VIBRATE " />Vous pouvez activer et personnaliser la vibration avec:
// Enable vibration and set duration in ms
isVibrate = true
vibrateDuration = 50L

AppIntro prend en charge un mode d'assistant où le bouton Skip sera remplacé par la flèche arrière. Cela est utile si vous présentez un sorcier à vos utilisateurs avec un ensemble d'étapes qu'ils doivent faire, et ils pourraient souvent faire des allers-retours.
Vous pouvez l'activer avec:
isWizardMode = true

Si vous souhaitez afficher votre intro avec une expérience pleine écran, vous pouvez activer le mode immersif . Cela masquera à la fois la barre d'état et la barre de navigation et l'utilisateur devra faire défiler en haut de l'écran pour les afficher à nouveau.
Cela vous permet d'avoir plus d'espace pour votre contenu d'introduction et vos graphiques.
Vous pouvez l'activer avec:
setImmersiveMode()Vous pouvez verrouiller le bouton Système Retour si vous ne souhaitez pas que votre utilisateur revienne de l'intro. Cela pourrait être utile si vous devez demander l'autorisation et que l'expérience d'intro n'est pas facultative.
Si tel est le cas, veuillez définir sur true le drapeau suivant:
isSystemBackButtonLocked = true
Vous pouvez personnaliser la barre d'état et la visibilité et la couleur de la barre de navigation avec les méthodes suivantes:
// 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) Par défaut, les diapositives utilisent toute la taille disponible à l'écran, il peut donc arriver que la barre inférieure chevauche le contenu de la diapositive si vous avez réglé la couleur d'arrière-plan sur une barre non transparente. Si vous souhaitez vous assurer que la barre ne chevauche pas le contenu, utilisez la fonction setBarMargin comme suit:
setBarMargin( true )
AppIntro simplifie le processus de demande d'autorisations d'exécution à votre utilisateur. Vous pouvez intégrer une ou plusieurs demandes d'autorisation à l'intérieur d'une diapositive avec la méthode askForPermissions dans votre activité.
Veuillez noter que:
slideNumber est dans une numérotation unique (il commence à partir de 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 ) Si vous avez besoin d'un contrôle supplémentaire sur la demande d'autorisation, vous pouvez remplacer ces deux méthodes sur la classe AppIntro :
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
} Si vous souhaitez restreindre la navigation entre vos diapositives (c'est-à-dire que l'utilisateur doit basculer une case à cocher afin de continuer), la fonction SlidePolicy pourrait vous aider.
Tout ce que vous avez à faire est de mettre en œuvre SlidePolicy dans vos diapositives.
Cette interface contient la propriété isPolicyRespected et la méthode onUserIllegallyRequestedNextPage que vous devez implémenter avec votre logique personnalisée
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.
}
} Vous pouvez trouver un exemple complet de SlidePolicy dans l'exemple d'application - CustomslidePolicyFragment.kt
AppIntro est livré avec un exemple d'application pleine d'exemples et de cas d'utilisation que vous pouvez utiliser comme inspiration pour votre projet. Vous pouvez le trouver à l'intérieur du dossier / exemple.
Vous pouvez obtenir un apk de débogage de l'exemple d'application à partir du travail de pré-fusion GitHub Actions en tant qu'artefact de sortie ici.

Voulez-vous aider Appintro à devenir international ?? Nous sommes plus qu'heureux! Appintro prend actuellement en charge les langues suivantes.
Pour ajouter une nouvelle traduction, ajoutez une demande de traction avec un nouveau fichier strings.xml dans un dossier values-xx (où xx est un code linguistique ISO 639-1 à deux lettres).
Afin de fournir la traduction, votre fichier doit contenir les chaînes suivantes:
<? 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 >Une version mise à jour de la traduction de la version anglaise est disponible ici.
Si une traduction dans votre langue est déjà disponible, veuillez le vérifier et éventuellement le réparer (toutes les chaînes doivent être répertoriées, pas seulement un sous-ensemble).
Le développement d'Appintro se produit sur la branche principale. Vous pouvez obtenir des versions SNAPSHOT directement à partir de Jitpack si nécessaire.
repositories {
maven { url " https://jitpack.io " }
} dependencies {
implementation " com.github.AppIntro:AppIntro:main-SNAPSHOT "
}Nous offrons une prise en charge de AppIntro sur la chaîne #Appintro sur Kotlinlang Slack. Venez rejoindre la conversation là-bas. Si vous n'avez pas accès à Kotlinlang Slack, vous pouvez demander un accès ici.
Nous recherchons des contributeurs! Ne soyez pas timide. ? N'hésitez pas à ouvrir les problèmes / les demandes de traction pour m'aider à améliorer ce projet.
Appintro est actuellement développé et entretenu par l'Appintro GitHub Org. Lors de la soumission d'un nouveau PR, veuillez enfiler l'un des:
AppIntro ne comptez sur aucune bibliothèque tierce autre que celles d'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.
Si vous utilisez AppIntro dans votre application et que vous souhaitez être répertorié ici, veuillez ouvrir une demande de traction et nous serons plus qu'heureux de vous inclure: