17

有没有办法只配置一次 Navigation Drawer,并在多个 Activity 上显示它?

4

2 回答 2

29

为此,只需创建一个实现抽屉的 BaseActivity 类,并让所有其他活动扩展这个。

于 2013-09-09T12:18:24.293 回答
7

对于想要活动代码示例的人,请在此处查看我的答案:https ://stackoverflow.com/a/19451842/2767703

如果您想要一个不错的过渡,我建议您这样做:当您单击NavigationDrawer关闭导航抽屉中的项目并同时使用 postdelayed 和 250 (关闭 所需的时间NavigationDrawer)。同时在 150 毫秒内将主要内容的 alpha 设置为 0。然后,当 Activity 开始时,将主要内容的 alpha 设置为 1,时间为 250 毫秒。这提供了一个很好的过渡。我在 Google IO 代码中找到了它: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它适用于 Fragments,但它有一种很好的实现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")
}
于 2015-05-22T08:06:43.633 回答