安卓导航抽屉上的多个活动

2022-09-03 00:01:28

有没有办法只配置一次导航抽屉,并在多个活动上显示它?


答案 1

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


答案 2

对于想要使用活动代码示例的人,请看一下我在这里的答案:https://stackoverflow.com/a/19451842/2767703

如果你想要一个很好的过渡,我会建议这个:当你点击关闭导航抽屉中的一个项目,同时使用250的postdelayed(关闭所需的时间)。同时以 150 毫秒将主要内容的 alpha 设置为 0 的动画效果。然后,当活动开始时,以 250 毫秒将主要内容的 alpha 设置为 1。这给了一个伟大的转变。我在谷歌IO代码中找到它:https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/BaseActivity.javaNavigationDrawerNavigationDrawer

顺便说一句,您还应该查看godara@Harish给出的链接: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")
}

推荐