API地址:https://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html
官方教程地址:https://developer.android.com/training/implementing-navigation/nav-drawer.html#top
Android原生的側滑控件DrawerLayout:
image.png
Overview
image.png
簡單上手
- 一般建議使用DrawerLayout做為Activity界面的根布局控件
- 添加菜單:在DrawerLayout的子控件上添加Layout_gravity屬性
- 如果需要添加左側菜單:將Layout_gravity的值改為left或者start
- 如果需要添加右側菜單:將Layout_gravity的值改為right或者end
寫left或者start,顯示效果上沒有什么區別,start是推薦的寫法,Google認為這樣命名更為合理,類似fill_parent和match_parent的關系,寫right或者end也是同理; 在有DrawerLayout可以同時添加左側菜單和右側菜單
- 添加Layout_gravity屬性的控件寬度推薦寫match_parent
image.png
2017-05-30 17_50_58.gif
幾個相關API
- mDrawer.isDrawerOpen(GravityCompat.START):判斷左側菜單是否打開
- mDrawer.closeDrawer(GravityCompat.START):關閉左側菜單
image.png
- mDrawer.setDrawerLockMode():設置菜單的鎖定模式,一般不建議設置,具體看需求
- LOCK_MODE_UNDEFINED:默認為不定義
- LOCK_MODE_UNLOCKED:不鎖定
- LOCK_MODE_LOCKED_CLOSED:鎖定為菜單關閉
- LOCK_MODE_LOCKED_OPEN:鎖定為菜單打開
- mDrawer.addDrawerListener()菜單滑動監聽的回調
兩個監聽對象:DrawerListener和SimpleDrawerListener
SimpleDrawerListener是DrawerListener的抽象實現類,DrawerListener強制重寫四個方法,SimpleDrawerListener可選擇重寫一個或多個方法,-
監聽中的四個回調方法:
- onDrawerSlide(View drawerView, float slideOffset):菜單在滑動的回調
- onDrawerOpened(View drawerView):菜單打開的回調
- onDrawerClosed(View drawerView) :菜單關閉的回調
- onDrawerStateChanged(int newState):菜單狀態改變的回調
高級用法:
在DrawerLayout的監聽回調onDrawerSlide(View drawerView, float slideOffset)中,有一個參數值得關注,滑動的偏移值slideOffset,這個值在0.0~1.0f之間變化,可以利用這個變化的值做一些比較有想象力的事:
- 設置主布局隨菜單滑動而滑動
- 設置菜單的深入淺出效果
- 設置其它的顏色漸變效果
- ......
在之前的文章:高仿Android QQ菜單,左側抽屜,底部導航, 已經實現了部分效果,這里就不扯了:
DrawerLayout statusbar顏色問題:
修改前和修改后的對比:
image.png
步驟:
1, 新建樣式文件values-v21/styles.xml
image.png
2, 在布局中添加android:fitsSystemWindows="true"屬性
image.png
3, Java代碼中設置顏色:mDrawer.setStatusBarBackground
image.png