【发布时间】:2013-09-12 22:13:54
【问题描述】:
有没有办法只配置一次 Navigation Drawer,并在多个 Activity 上显示?
【问题讨论】:
-
Here 是一个不错的教程。
-
正如您向下滚动时看到的,这已经解决了
标签: java android navigation-drawer
有没有办法只配置一次 Navigation Drawer,并在多个 Activity 上显示?
【问题讨论】:
标签: java android navigation-drawer
为此,只需创建一个实现抽屉的 BaseActivity 类, 并让您的所有其他活动扩展此活动。
【讨论】:
onDrawerClosed 的更改,在新活动启动之前没有机会触发。
对于想要一个带有活动的代码示例的人,请在此处查看我的答案:https://stackoverflow.com/a/19451842/2767703
如果你想要一个漂亮的过渡,我建议:当你点击 NavigationDrawer 中的一个项目时,关闭导航抽屉并同时使用带有 250 的 postdelayed(关闭 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")
}
【讨论】: