web-dev-qa-db-fra.com

Android Tiroir de navigation sur plusieurs activités

Existe-t-il un moyen de configurer une seule fois le tiroir de navigation et de l'afficher sur plusieurs activités?

16
Deniz Celebi

Pour cela, créez simplement une classe BaseActivity qui implémente le tiroir et laissez toutes vos autres activités étendre celle-ci.

28
Harish Godara

Pour les personnes qui souhaitent un exemple de code avec des activités, jetez un œil à ma réponse ici: https://stackoverflow.com/a/19451842/27677

Si vous voulez une transition agréable, je suggère ceci: lorsque vous cliquez sur un élément dans le NavigationDrawer fermez le tiroir de navigation et utilisez simultanément le postdelayed avec 250 (le temps qu'il faut pour fermer le NavigationDrawer). Animez également simultanément l'alpha du contenu principal à 0 avec 150 millisecondes. Puis, lorsqu'une activité démarre, animez l'alpha du contenu principal à 1 avec 250 millisecondes. Cela donne une grande transition. Je l'ai trouvé dans le code Google IO: https://github.com/google/iosched/blob/master/Android/src/main/Java/com/google/ samples/apps/iosched/ui/BaseActivity.Java

À propos, vous devriez également regarder le lien que @Harish Godara a donné: http://www.michenux.net/Android-navigation-drawer-748.html Il fonctionne avec des fragments mais il a un Belle façon d'implémenter le NavigationDrawer.

Modifier

Étant donné que certains liens sont morts, voici ce que j'ai utilisé dans mon dernier projet pour obtenir l'animation. C'est à Kotlin, mais cela devrait clarifier le point. C'est tout le code de la BaseDrawerActivity:

private val NAVDRAWER_LAUNCH_DELAY = 250L
private val MAIN_CONTENT_FADEOUT_DURATION = 150L
private val MAIN_CONTENT_FADEIN_DURATION = 250L

-

private var shouldAnimate:Boolean
    set(value) { intent.putExtra("animateTransition", value) }
    get() = intent.getBooleanExtra("animateTransition", false)

-

private fun changeDrawerItem(newClass: Class<*>) {
    runDelayed(NAVDRAWER_LAUNCH_DELAY, {
        startActivity(Intent(this, newClass).apply {
            addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
            putExtra("animateTransition", true)
            putExtra("selectedNav", selectedNavigationItem.name)
        })
        overridePendingTransition(0, 0)
    })

    mainContent.animate()?.alpha(0f)?.duration = MAIN_CONTENT_FADEOUT_DURATION
}

-

override fun onStart() {
    super.onStart()

    if(shouldAnimate) {
        mainContent.alpha = 0f
        mainContent.animate()?.alpha(1f)?.duration = MAIN_CONTENT_FADEIN_DURATION
    } else {
        mainContent.alpha = 1f
    }

    val selectedNav = intent.getStringExtra("selectedNav")
    if(selectedNav != null) {
        selectedNavigationItem = DrawerItem.valueOf(selectedNav)
    }
}

-

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    setIntent(intent)

    if(shouldAnimate) {
        overridePendingTransition(0, 0)
    }
}

-

override fun onResume() {
    super.onResume()
    intent.removeExtra("animateTransition")
}
7
Kevin van Mierlo