Android DrawerLayout 側滑菜單欄

一.使用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));
相關文章
相關標籤/搜索