一.使用DrawLayou實現:java
頁面佈局:android
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/id_drawerlayout" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/id_framelayout" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/id_btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1111" /> </FrameLayout> <LinearLayout android:id="@+id/id_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#E0EEE0" android:orientation="vertical" > <ListView android:id="@+id/id_lv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:divider="#CD853F" android:dividerHeight="2dp" > </ListView> </LinearLayout> </android.support.v4.widget.DrawerLayout>
說明:ide
1. 必須把DrawerLayout做爲佈局的跟標籤。函數
2. 而後在跟標籤中添加一個包含內容的視圖,就是當抽屜徹底隱藏的時候顯示的內容佈局。佈局
3. 添加一個抽屜佈局,這個佈局能夠按照需求本身定義,個人demo中是一個listview。this
4. 抽屜佈局中,須要指定android:layout_gravity屬性,官方說明是用start代替left。spa
5. 抽屜佈局的寬度最好不要超過320dp,這樣作爲了當抽屜徹底顯示的時候,不至於把內容佈局所有遮擋。code
初始化listviewxml
mLv = (ListView) findViewById(R.id.id_lv); str = new String[] { "item1", "item2", "item3"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, str); mLv.setAdapter(adapter); mLv.setOnItemClickListener(this);
設置抽屜導航的監聽事件。添加監聽器的時候有三種方式。事件
1. 設置DrawerLayout.DrawerListener做爲監聽器類,裏面包含四個回調函數。
mDrawerLayout.setDrawerListener(new DrawerListener() { /** * 當抽屜滑動狀態改變的時候被調用 * 狀態值是STATE_IDLE(閒置--0), STATE_DRAGGING(拖拽的--1), STATE_SETTLING(固定--2)中之一。 * 抽屜打開的時候,點擊抽屜,drawer的狀態就會變成STATE_DRAGGING,而後變成STATE_IDLE */ @Override public void onDrawerStateChanged(int arg0) { Log.i("drawer", "drawer的狀態:" + arg0); } /** * 當抽屜被滑動的時候調用此方法 * arg1 表示 滑動的幅度(0-1) */ @Override public void onDrawerSlide(View arg0, float arg1) { Log.i("drawer", arg1 + ""); } /** * 當一個抽屜被徹底打開的時候被調用 */ @Override public void onDrawerOpened(View arg0) { Log.i("drawer", "抽屜被徹底打開了!"); } /** * 當一個抽屜徹底關閉的時候調用此方法 */ @Override public void onDrawerClosed(View arg0) { Log.i("drawer", "抽屜被徹底關閉了!"); } });
2. 設置DrawerListener的子類SimpleDrawerListener,使用這個類的時候沒必要實現所有的回調函數,能夠根據本身的須要重寫相應的方法。
mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } });
3. 使用DrawerListener的子類ActionBarDrawerToggle。通常與ActionBar結合使用。
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerClosed(View drawerView) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } @Override public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle);
4.禁止使用滑動展開側邊欄
mDraLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
5.設置側邊欄展開後,佈局外的顏色。
mDraLayout.setScrimColor(this.getResources().getColor(R.color.transparent));