web-dev-qa-db-ja.com

Android複数のアクティビティのナビゲーションドロワー

ナビゲーションドロワーを一度だけ構成して、複数のアクティビティに表示する方法はありますか?

16
Deniz Celebi

このためには、ドロワーを実装するBaseActivityクラスを作成し、他のすべてのアクティビティにこれを拡張させます。

28
Harish Godara

アクティビティのあるコード例が必要な人は、ここで私の答えを見てください: https://stackoverflow.com/a/19451842/27677

ニーストランジションが必要な場合は、次のことをお勧めします。NavigationDrawerのアイテムをクリックすると、ナビゲーションドロワーが閉じ、同時に250でpostdelayedが使用されます(NavigationDrawerを閉じるのにかかる時間)。また、メインコンテンツのアルファを150ミリ秒で同時に0にアニメーション化します。次に、アクティビティが開始すると、メインコンテンツのアルファを250ミリ秒で1にアニメーション化します。これは大きな移行をもたらします。 Google IO code: https://github.com/google/iosched/blob/master/Android/src/main/Java/com/google/ samples/apps/iosched/ui/BaseActivity.Java

ちなみに、@ Harish Godaraのリンクも確認する必要があります。 http://www.michenux.net/Android-navigation-drawer-748.html フラグメントで機能しますが、 NavigationDrawerを実装する素晴らしい方法。

編集

いくつかのリンクが死んでいるので、アニメーションを取得するために私の最後のプロジェクトで使用したものです。 Kotlinにありますが、ポイントを明確にする必要があります。これは、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