Есть ли способ настроить только один раз навигационный ящик и отобразить его на нескольких активах?
Android-навигатор для нескольких видов деятельности
Ответ 1
Для этого просто создайте класс BaseActivity, который реализует ящик, и пусть все ваши другие действия расширяют этот.
Ответ 2
Для людей, которым нужен пример кода с помощью "Действия", взгляните на мой ответ здесь: fooobar.com/info/39617/...
Если вы хотите приятный переход, я бы предложил следующее: когда вы нажимаете на элемент в NavigationDrawer
, закройте навигационный ящик и одновременно используйте postdelayed with 250 (время, необходимое для закрытия NavigationDrawer
). Также одновременно анимируйте основное содержимое альфа до 0 с 150 миллисекундами. Затем, когда Activity начинает оживлять основной контент alpha до 1 с 250 миллисекундами. Это дает отличный переход. Я нашел его в коде IO 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
.
Edit
Так как некоторые ссылки мертвы, это то, что я использовал в своем последнем проекте для получения анимации. Это в Котлине, но это должно быть ясно. Это все код из 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")
}