【问题标题】:Android Navigation Drawer on multiple Activities多个活动上的 Android 导航抽屉
【发布时间】:2013-09-12 22:13:54
【问题描述】:

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

【问题讨论】:

标签: java android navigation-drawer


【解决方案1】:

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

【讨论】:

  • @Harish Godara:你能举个例子或教程吗
  • @Harish Godara:我正在尝试相同的示例,但是请您帮我看看,当我制作一个测试项目时它工作正常,但是当我将它集成到我的应用程序中时,抽屉没有打开为什么就这样..?
  • @HarishGodara 我明白了。你能告诉我,如果我有不同的活动说 A、B、C、D 现在我在 a 上显示抽屉,并希望导航到 B 以及同一个抽屉,它的状态是不使用片段
  • 我正在做一些与此类似的事情,但我遇到了一些小但令人恼火的问题。首先,当您从导航抽屉启动新活动时,它看起来有点笨拙,因为新活动在抽屉关闭的同时触发。此外,当您返回上一个活动时,会短暂发生标题交换。交换是从全局到活动上下文 onDrawerClosed 的更改,在新活动启动之前没有机会触发。
  • 一切都很完美。但是我怎样才能向不同的子活动显示不同的布局????请为此提供任何信息。
【解决方案2】:

对于想要一个带有活动的代码示例的人,请在此处查看我的答案: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")
}

【讨论】:

  • 该链接现在指向 404,但我真的对漂亮的过渡很好奇。你有这方面的资源吗?
  • @dan 我在上一个项目中添加了一个示例。它是用 Kotlin 编写的,但应该足以让您了解如何做到这一点
猜你喜欢
  • 2014-08-22
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
相关资源
最近更新 更多