AppIntro adalah perpustakaan Android yang membantu Anda membangun intro korsel keren untuk aplikasi Anda. AppIntro memiliki dukungan untuk meminta izin dan membantu Anda membuat pengalaman onboarding yang hebat hanya dalam beberapa menit.


AppIntro didistribusikan melalui Jitpack.
Untuk menggunakannya, Anda perlu menambahkan ketergantungan lulusan berikut ke file build.gradle Anda dari modul tempat Anda ingin menggunakan AppIntro (bukan file root).
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 '
}Harap dicatat bahwa sejak AppIntro 5.x, perpustakaan mendukung Android X. Jika Anda belum bermigrasi, Anda mungkin ingin menggunakan versi perpustakaan sebelumnya yang menggunakan paket pustaka dukungan lama (atau coba mode reverse jetifier).
Untuk menggunakan AppIntro, Anda hanya perlu membuat aktivitas baru yang memperluas AppIntro seperti berikut:
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()
}
} Harap dicatat bahwa Anda tidak boleh menghubungi SetContentView. AppIntro Superclass merawatnya untuk Anda.
Juga konfirmasikan bahwa Anda mengesampingkan onCreate dengan satu parameter ( Bundle ) dan Anda tidak menggunakan override lain (seperti onCreate(Bundle, PersistableBundle) ) sebagai gantinya.
Akhirnya, nyatakan aktivitas dalam manifes Anda seperti itu:
< activity android : name = " com.example.MyCustomAppIntro "
android : label = " My Custom AppIntro " /> Kami menyarankan untuk tidak mendeklarasikan MyCustomAppIntro sebagai aktivitas pertama Anda kecuali Anda ingin intro diluncurkan setiap kali aplikasi Anda dimulai. Idealnya Anda harus menampilkan aktivitas AppIntro hanya sekali kepada pengguna, dan Anda harus menyembunyikannya setelah selesai (Anda dapat menggunakan bendera di SharedPreferences ).
Anda dapat menemukan banyak contoh dalam bahasa java di direktori contoh
Jika Anda bermigrasi dari AppIntro v5.x ke V6.x , harap harap beberapa perubahan besar. Anda dapat menemukan dokumentasi tentang cara memperbarui kode Anda pada panduan migrasi lainnya.
Jangan lupa untuk memeriksa changelog untuk melihat semua perubahan dalam versi terbaru AppIntro.
Titik masuk untuk menambahkan slide baru adalah fungsi addSlide(fragment: Fragment) pada kelas AppIntro . Anda dapat dengan mudah menggunakannya untuk menambahkan Fragment baru ke korsel.
Perpustakaan dilengkapi dengan beberapa kelas util untuk membantu Anda membuat slide Anda hanya dengan beberapa baris:
AppIntroFragment Anda dapat menggunakan AppIntroFragment jika Anda hanya ingin menyesuaikan judul, deskripsi, gambar, dan warna. Itulah pendekatan yang disarankan jika Anda ingin membuat intro cepat:
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,
))Semua parameter opsional, jadi Anda bebas untuk menyesuaikan slide Anda sesuai keinginan.
Jika Anda perlu membuat beberapa slide secara terprogram, Anda juga dapat menggunakan kelas SliderPage . Kelas ini dapat diteruskan ke AppIntroFragment.createInstance(sliderPage: SliderPage) yang akan membuat slide baru mulai dari contoh itu.
AppIntroCustomLayoutFragment Jika Anda memerlukan kontrol lebih lanjut pada kustomisasi slide Anda, Anda dapat menggunakan AppIntroCustomLayoutFragment . Ini akan memungkinkan Anda melewati file sumber daya tata letak khusus Anda:
AppIntroCustomLayoutFragment .newInstance( R .layout.intro_custom_layout1)Ini memungkinkan Anda untuk mencapai tata letak yang kompleks dan memasukkan logika khusus Anda di intro (lihat juga kebijakan slide):

AppIntro menawarkan beberapa opsi konfigurasi untuk membantu Anda menyesuaikan pengalaman onboarding Anda.
AppIntro hadir dengan satu set transformator slide yang dapat Anda gunakan di luar kotak untuk menghidupkan transisi slide Anda.
| Slide Transformers | Slide Transformers |
|---|---|
Memudar ![]() | Zoom ![]() |
Mengalir ![]() | Meluncur ![]() |
Kedalaman ![]() | Parallax ![]() |
Anda cukup memanggil setTransformer() dan lulus salah satu subkelas dari AppIntroPageTransformerType kelas yang disegel:
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
)) Anda juga dapat memberikan transformator slide khusus Anda (menerapkan antarmuka ViewPager.PageTransformer ) dengan:
setCustomTransformer( ViewPager . PageTransformer )
AppIntro menawarkan kemungkinan untuk menghidupkan transisi warna antara dua latar belakang slide. Fitur ini dinonaktifkan secara default, dan Anda perlu mengaktifkannya di AppIntro Anda dengan:
isColorTransitionsEnabled = true Setelah Anda mengaktifkannya, warnanya akan dianimasikan di antara slide dengan gradien. Pastikan Anda memberikan parameter backgroundColor dalam slide Anda.
Jika Anda memberikan fragmen khusus, Anda dapat membiarkannya mendukung transisi warna dengan mengimplementasikan antarmuka SlideBackgroundColorHolder .
AppIntro dikirimkan dengan dua tata letak tingkat atas yang dapat Anda gunakan. Tata letak default ( AppIntro ) memiliki tombol tekstual, sedangkan tata letak alternatif memiliki tombol dengan ikon.
Untuk mengubah tata letak jendela, Anda dapat mengubah superclass Anda ke AppIntro2 . Metode untuk menambah dan menyesuaikan AppIntro tidak berubah.
class MyCustomAppIntro : AppIntro2 () {
// Same code as displayed in the `Basic Usage` section of this README
}| Halaman | AppIntro | AppIntro2 |
|---|---|---|
| halaman standar | ![]() | ![]() |
| halaman terakhir | ![]() | ![]() |
AppIntro mendukung dua indikator di luar kotak untuk menunjukkan kemajuan pengalaman intro kepada pengguna:
DotIndicatorController diwakili dengan daftar dot (default)ProgressIndicatorController diwakili dengan bilah kemajuan. DotIndicator | ProgressIndicator |
|---|---|
![]() | ![]() |
Selain itu, Anda dapat menyediakan indikator Anda sendiri dengan memberikan implementasi antarmuka IndicatorController .
Anda dapat menyesuaikan indikator dengan API berikut di kelas 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 */ ) Jika Anda tidak menentukan kustomisasi apa pun, DotIndicatorController akan ditampilkan.
AppIntro mendukung memberikan umpan balik getaran haptic pada klik tombol. Harap dicatat bahwa Anda perlu menentukan izin getaran dalam manifes aplikasi Anda (perpustakaan tidak melakukannya). Jika Anda lupa menentukan izin, aplikasi akan mengalami kerusakan.
< uses-permission android : name = " android.permission.VIBRATE " />Anda dapat mengaktifkan dan menyesuaikan getaran dengan:
// Enable vibration and set duration in ms
isVibrate = true
vibrateDuration = 50L

AppIntro mendukung mode Wizard di mana tombol Skip akan diganti dengan panah belakang. Ini berguna jika Anda menyajikan wizard kepada pengguna Anda dengan satu set langkah yang perlu mereka lakukan, dan mereka mungkin sering bolak -balik.
Anda dapat mengaktifkannya dengan:
isWizardMode = true

Jika Anda ingin menampilkan intro Anda dengan pengalaman layar penuh, Anda dapat mengaktifkan mode mendalam . Ini akan menyembunyikan bilah status dan bilah navigasi dan pengguna harus menggulir dari atas layar untuk menunjukkannya lagi.
Ini memungkinkan Anda untuk memiliki lebih banyak ruang untuk konten dan grafik intro Anda.
Anda dapat mengaktifkannya dengan:
setImmersiveMode()Anda dapat mengunci tombol kembali sistem jika Anda tidak ingin pengguna Anda kembali dari intro. Ini bisa berguna jika Anda perlu meminta izin dan pengalaman intro tidak opsional.
Jika ini masalahnya, silakan atur ke bendera berikut:
isSystemBackButtonLocked = true
Anda dapat menyesuaikan bilah status , dan visibilitas & warna bilah navigasi dengan metode berikut:
// 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) Secara default, slide menggunakan seluruh ukuran yang tersedia di layar, sehingga mungkin terjadi bahwa bilah bagian bawah tumpang tindih konten slide jika Anda telah mengatur warna latar belakang ke yang tidak transparan. Jika Anda ingin memastikan bahwa bilah tidak tumpang tindih konten, gunakan fungsi setBarMargin sebagai berikut:
setBarMargin( true )
AppIntro menyederhanakan proses meminta izin runtime kepada pengguna Anda. Anda dapat mengintegrasikan satu atau lebih permintaan izin di dalam slide dengan metode askForPermissions di dalam aktivitas Anda.
Harap dicatat bahwa:
slideNumber berada dalam penomoran satu berbasis (dimulai dari 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 ) Jika Anda memerlukan kontrol lebih lanjut atas permintaan izin, Anda dapat mengganti kedua metode tersebut di kelas 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
} Jika Anda ingin membatasi navigasi di antara slide Anda (yaitu pengguna harus beralih kotak centang untuk melanjutkan), fitur SlidePolicy mungkin membantu Anda.
Yang harus Anda lakukan adalah menerapkan SlidePolicy di slide Anda.
Antarmuka ini berisi properti isPolicyRespected dan metode onUserIllegallyRequestedNextPage yang harus Anda terapkan dengan logika khusus Anda
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.
}
} Anda dapat menemukan contoh kerja SlidePolicy lengkap di aplikasi contoh - customslidepolicyfragment.kt
AppIntro dilengkapi dengan aplikasi sampel yang penuh dengan contoh dan menggunakan casing yang dapat Anda gunakan sebagai inspirasi untuk proyek Anda. Anda dapat menemukannya di dalam folder /contoh.
Anda bisa mendapatkan apk debug dari aplikasi sampel dari pekerjaan gitub github sebagai artefak output di sini.

Apakah Anda ingin membantu AppIntro menjadi internasional ?? Kami sangat bahagia! AppIntro saat ini mendukung bahasa -bahasa berikut.
Untuk menambahkan terjemahan baru cukup tambahkan permintaan tarik dengan file strings.xml baru di dalam folder values-xx (di mana xx adalah kode bahasa ISO 639-1 dua huruf).
Untuk memberikan terjemahan, file Anda perlu berisi string berikut:
<? 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 >Versi terbaru dari terjemahan versi bahasa Inggris tersedia di sini.
Jika terjemahan dalam bahasa Anda sudah tersedia, silakan periksa dan akhirnya perbaiki (semua string harus terdaftar, bukan hanya subset).
Pengembangan AppIntro terjadi di cabang utama. Anda bisa mendapatkan versi SNAPSHOT langsung dari Jitpack jika diperlukan.
repositories {
maven { url " https://jitpack.io " }
} dependencies {
implementation " com.github.AppIntro:AppIntro:main-SNAPSHOT "
}Kami menawarkan dukungan untuk AppIntro di saluran #AppIntro di Kotlinlang Slack. Datang dan bergabunglah dengan percakapan di sana. Jika Anda tidak memiliki akses ke Kotlinlang Slack, Anda dapat meminta akses di sini.
Kami mencari kontributor! Jangan malu. ? Jangan ragu untuk membuka masalah/menarik permintaan untuk membantu saya meningkatkan proyek ini.
AppIntro saat ini dikembangkan dan dikelola oleh AppIntro Github Org. Saat mengirimkan PR baru, silakan salah satu dari:
AppIntro tidak mengandalkan perpustakaan pihak ketiga selain yang dari 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.
Jika Anda menggunakan AppIntro di aplikasi Anda dan ingin terdaftar di sini, buka permintaan tarik dan kami akan dengan senang hati memasukkan Anda: