Android ActionBarDrawerToggle、DrawerLayout、ActionBar 結合

ActionBarDrawerToggle是一個開關,用於打開/關閉DrawerLayout抽屜


ActionBarDrawerToggle 提供了一個方便的方式來配合DrawerLayout和ActionBar,以實現推薦的抽屜功能。

即點擊ActionBar的home按鈕,即可彈出DrawerLayout抽屜。


在Activity中的兩個回調函數中使用它:

   onConfigurationChanged
   onOptionsItemSelected

調用ActionBarDrawerToggle.syncState() 在Activity的onPostCreate()中;指示,ActionBarDrawerToggle與DrawerLayout的狀態同步,並將ActionBarDrawerToggle中的drawer圖標,設置爲ActionBar的Home-Button的icon


關於DrawerLayout就不多說了,請移步這裏 http://blog.csdn.net/jjwwmlp456/article/details/38682637

在這個官方的例子中,已經實現了本文所要講述的內容。


整體的效果呢,需要支持ActionBar,support-v7包的 compat中有 ActionBarActivity可繼承, 3.0以後也可以用主題的方式直接使用。不多說了


幾個主要的函數調用

  1. ActionBarDrawerToggle mDrawerToggle;  
  2.     DrawerLayout mDrawerLayout;  
  3.     void init() {  
  4.         mDrawerLayout.setDrawerListener(new MyDrawerListener());//設置drawer的開關監聽  
  5.         mDrawerToggle = new ActionBarDrawerToggle(activity, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close);  
  6.     }  
  7.     /** activity創建完成後 */  
  8.     @Override  
  9.     protected void onPostCreate(Bundle savedInstanceState) {  
  10.         super.onPostCreate(savedInstanceState);  
  11.         mDrawerToggle.syncState();//該方法會自動和actionBar關聯, 將開關的圖片顯示在了action上,如果不設置,也可以有抽屜的效果,不過是默認的圖標  
  12.     }  
  13.   
  14.     /** 菜單鍵點擊的事件處理 */  
  15.     @Override  
  16.     public boolean onOptionsItemSelected(MenuItem item) {  
  17.         return mDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);  
  18.     }  
  19.     /** 設備配置改變時 */  
  20.     @Override  
  21.     public void onConfigurationChanged(Configuration newConfig) {  
  22.         super.onConfigurationChanged(newConfig);  
  23.         mDrawerToggle.onConfigurationChanged(newConfig);  
  24.     }  
  25.       
  26.     /** drawer的監聽 */  
  27.     private class MyDrawerListener implements DrawerLayout.DrawerListener {  
  28.         @Override  
  29.         public void onDrawerOpened(View drawerView) {// 打開drawer  
  30.             mDrawerToggle.onDrawerOpened(drawerView);//開關狀態改爲opened  
  31.         }  
  32.   
  33.         @Override  
  34.         public void onDrawerClosed(View drawerView) {// 關閉drawer  
  35.             mDrawerToggle.onDrawerClosed(drawerView);//開關狀態改爲closed  
  36.         }  
  37.   
  38.         @Override  
  39.         public void onDrawerSlide(View drawerView, float slideOffset) {// drawer滑動的回調  
  40.             mDrawerToggle.onDrawerSlide(drawerView, slideOffset);  
  41.         }  
  42.   
  43.         @Override  
  44.         public void onDrawerStateChanged(int newState) {// drawer狀態改變的回調  
  45.             mDrawerToggle.onDrawerStateChanged(newState);  
  46.         }  
  47.     }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章