DrawerLayout在高版本(Android4.4以及以上)的v4包中
側(cè)邊菜單可以根據(jù)手勢(shì)展開與隱藏(drawerLayout自身特性)
有幾點(diǎn)
1.drawerLayout其實(shí)是一個(gè)布局控件锰瘸,跟LinearLayout等控件是一種東西揪阶,但是drawerLayout帶有滑動(dòng)的功能假哎。只要按照drawerLayout的規(guī)定布局方式寫完布局俄周,就能
有側(cè)滑的效果。其中:DrawerLayout最好為界面的根布局想括,
菜單可添加到左邊或右邊
2.drawerLayout左側(cè)菜單(或者右側(cè))的展開與隱藏可以被DrawerLayout.DrawerListener的實(shí)現(xiàn)監(jiān)聽到婶溯,這樣你就可以在菜單展開與隱藏反生的時(shí)刻做一些希望做的事情跌穗,比如更新actionbar菜單等痘系。如果你的activity有actionbar的話菲嘴,還是建議你用ActionBarDrawerToggle來監(jiān)聽饿自,ActionBarDrawerToggle實(shí)現(xiàn)了DrawerListener汰翠,所以他能做DrawerListener可以做的任何事情,同時(shí)他還能將drawerLayout的展開和隱藏與actionbar的app 圖標(biāo)關(guān)聯(lián)起來昭雌,當(dāng)展開與隱藏的時(shí)候圖標(biāo)有一定的平移效果复唤,點(diǎn)擊圖標(biāo)的時(shí)候還能展開或者隱藏菜單。
3.何為側(cè)邊菜單烛卧。
側(cè)邊菜單其實(shí)只是一個(gè)普通的View佛纫,一般里面裝的是ListView,看起來就像菜單总放,他完全可以是一個(gè)button呈宇,textView等等。雖然稱為菜單局雄,但跟Activity的菜單形式是兩碼事甥啄,Activity的菜單只需要在資源文件中定義好,就能按照固定的形式顯示出來炬搭。而drawerLayout的側(cè)邊菜單顯示成什么樣完全是取決于你自己蜈漓,同樣點(diǎn)擊事件也完全由你自己去寫穆桂。如下代碼所示我們的側(cè)邊菜單是一個(gè)ListView顯示的:
4.在代碼中主動(dòng)展開與隱藏側(cè)邊菜單。
在點(diǎn)擊側(cè)邊菜單選項(xiàng)的時(shí)候我們往往需要隱藏菜單來顯示整個(gè)菜單對(duì)應(yīng)的內(nèi)容融虽。DrawerLayout.closeDrawer方法用于隱藏側(cè)邊菜單享完,DrawerLayout.openDrawer方法用于展開側(cè)邊菜單(參見第3點(diǎn)中的代碼部分)
<!--菜單添加到左邊則添加屬性:-->
layout_gravity="start/left"
<!--菜單添加到右邊則添加屬性:-->
layout_gravity="end/right"
使用
布局----DrawerLayout包裹兩個(gè)布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--主界面--主界面在下面因此先寫-->
<include layout="@layout/layout_main" />
<!--菜單界面-->
<!--android:layout_gravity="left"---不提示自己寫-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@color/colorPrimaryDark">
<include layout="@layout/menu_list" />
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
與toolbar結(jié)合
Andriod應(yīng)用頭部歷程:TitleBar->ActionBar->ToolBar
**添加ActionBar: **
讓當(dāng)前應(yīng)用的theme繼承自v7中定義的主題Theme.AppCompat.Light
Activity需要繼承AppCompatActivity或者ActionBarActivity
顯示漢堡按鈕
//1.取出ActionBar對(duì)象
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(getString(R.string.app_name));
//2.啟用home按鈕
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
//3.顯示漢堡包按鈕(默認(rèn)是箭頭)
//參1activity 參2drawerLayout 參3參4(打開和關(guān)閉字符串的id--沒用傳0)
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 0, 0);
點(diǎn)擊home按鈕--切換
//同步狀態(tài),同步ActionBar和DrawerLayout的狀態(tài)
drawerToggle.syncState();
//漢堡包按鈕與箭頭切換動(dòng)畫:
//4.給drawerLayout設(shè)置滑動(dòng)監(jiān)聽器--drawerToggle類實(shí)現(xiàn)了DrawerListener
drawerLayout.addDrawerListener(drawerToggle);
//這行代碼執(zhí)行--就實(shí)現(xiàn)了漢堡與箭頭隨著drawerLayout滑動(dòng)而進(jìn)行切換
//因此只需設(shè)置home 按鈕的點(diǎn)擊事件--打開關(guān)閉menu菜單即可
home按鈕的點(diǎn)擊事件
/**
* * 當(dāng)點(diǎn)擊Actionbar的home按鈕的時(shí)候會(huì)調(diào)用onOptionsItemSelected方法
*
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//這個(gè)方法實(shí)現(xiàn)效果同上
drawerToggle.onOptionsItemSelected(item);
return super.onOptionsItemSelected(item);
}