Навигационный ящик Android для нескольких действий

Есть ли способ настроить только один раз навигационный ящик и отобразить его на нескольких активитах?

2 ответа

Решение

Для этого просто создайте класс BaseActivity, который реализует секцию, и позвольте всем остальным действиям расширять этот класс.

Для людей, которым нужен пример кода с деятельностью, посмотрите мой ответ здесь: /questions/36616253/odin-i-tot-zhe-navigatsionnyij-yaschik-v-raznyih-dejstviyah/36616271#36616271

Если вы хотите хороший переход, я бы предложил это: Когда вы нажимаете на элемент в NavigationDrawer закройте навигационный ящик и одновременно используйте пост-задержку с 250 (время, необходимое для закрытия NavigationDrawer). Также одновременно анимируйте альфа основного содержимого до 0 с 150 миллисекундами. Затем, когда начинается действие, анимируйте альфа основного содержимого в 1 с 250 миллисекундами. Это дает отличный переход. Я нашел его в коде ввода-вывода Google: 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,

редактировать

Так как некоторые ссылки мертвы, вот что я использовал в своем последнем проекте, чтобы получить анимацию. Это в Котлине, но это должно прояснить суть. Это весь код из 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")
}
Другие вопросы по тегам