2013-09-09 5 views
16

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

+0

[Здесь] (http://naddydroid.blogspot.in/) хороший учебник. – Naddy

+0

См. Http://stackoverflow.com/questions/19451715/same-navigation-drawer-on-different-activities –

+0

Как вы видите, когда вы прокручиваете вниз, это уже разрешено –

ответ

26

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

+0

@Harish Godara: Можно ли дать какой-либо пример или любой учебник для того же –

+2

@stiffler: http://www.michenux.net/android-navigation-drawer-748.html –

+0

@Harish Godara: Я пытался использовать один и тот же пример, но могу у вас помочь, когда я сделал тестовый проект отлично работает, но когда я интегрировал то же самое в своем приложении, ящик не понял, почему это так ..? –

7

Для людей, желающих пример кода с деятельностью, посмотрите на мой ответ здесь: https://stackoverflow.com/a/19451842/2767703

Если вы хотите хороший переход, я хотел бы предложить следующее: При нажатии на элемент в NavigationDrawer закрыть навигацию выдвижной ящик и одновременно использовать postdelayed с 250 (время, необходимое для закрытия NavigationDrawer). Также одновременно анимация альфа-файла основного контента до 0 с 150 миллисекундами. Затем, когда Activity начинает оживлять альфа-файл основного контента до 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 Он работает с фрагментами, но у него есть хороший способ реализации 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") 
} 
+0

ссылка приводит к 404 сейчас, однако им очень любопытно о приятных переходах. У вас есть ресурсы на это? – dan

+0

@dan Я добавил пример, как я это сделал в своем последнем проекте. Это написано в Котлине, но должно быть достаточно, чтобы дать вам представление, как это сделать –

+0

awesome thanks! – dan