Material Design (三) Navigation Drawer的使用

DrawerLayout是在android.support.v4.widget包下甥角,可以實(shí)現(xiàn)app的側(cè)滑菜單谍珊,通過手勢的滑動打開或關(guān)閉側(cè)邊菜單诅蝶。這篇文章的學(xué)習(xí)將繼續(xù)在上一篇文章搭建的項(xiàng)目上實(shí)現(xiàn)

實(shí)現(xiàn)側(cè)滑菜單

1.使用DrawerLayout和NavigationView

要使用<android.support.v4.widget.DrawerLayout/>,需要將文件根布局改成<android.support.v4.widget.DrawerLayout/>標(biāo)簽,在這個標(biāo)簽中只放兩個直接子控件候生,第一個放之前的整體布局作為界面主要內(nèi)容纱皆,在主要內(nèi)容之后放另外一個drawer作為側(cè)滑導(dǎo)航可以使用如下控件實(shí)現(xiàn):

<android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:text="This is menu"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/nav_menu" />

android:layout_gravity="start" 用于設(shè)置側(cè)滑導(dǎo)航從哪邊滑出湾趾,start是根據(jù)系統(tǒng)語言開始的方向設(shè)置(如中文的讀寫就是從左邊往右的芭商,阿拉伯語是從右往左的),所以這樣設(shè)置后我們的側(cè)滑菜單就是從左邊滑出的了搀缠,如果確定是左邊或右邊滑出铛楣,可以直接用left或right

app:headerLayout="@layout/nav_header" 設(shè)置菜單導(dǎo)航頭部布局
app:menu="@menu/nav_menu" 設(shè)置導(dǎo)航菜單選項(xiàng)

nva_header.xml將展示用戶頭像、用戶名以及用戶郵箱等信息艺普,具體代碼如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="180dp"
    android:padding="16dp"
    android:background="?attr/colorAccent"
    android:gravity="center_vertical"
    android:orientation="vertical">

    <de.hdodenhof.circleimageview.CircleImageView
        android:layout_marginTop="30dp"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@drawable/user_head" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="Enid"
        android:textColor="#ffffff" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="kivi18781@gmail.com"
        android:textColor="#ffffff" />

</LinearLayout>

這里面用戶頭像的使用用了<de.hdodenhof.circleimageview.CircleImageView/>實(shí)現(xiàn)簸州,需要在app下的build.grade加入依賴包:

compile 'de.hdodenhof:circleimageview:2.1.0'

nav_menu.xml是實(shí)現(xiàn)菜單選項(xiàng)的文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_item_1"
            android:icon="@mipmap/ic_launcher"
            android:title="Item1" />
        <item
            android:id="@+id/nav_item_2"
            android:icon="@mipmap/ic_launcher"
            android:title="Item2" />
        <item
            android:id="@+id/nav_item_3"
            android:icon="@mipmap/ic_launcher"
            android:title="Item3" />
    </group>

    <item android:title="Sub items">
        <menu>
            <item
                android:id="@+id/nav_sub_1"
                android:icon="@mipmap/ic_launcher"
                android:title="My sub item 1" />
            <item
                android:id="@+id/nav_sub_2"
                android:icon="@mipmap/ic_launcher"
                android:title="My sub item 2" />
        </menu>
    </item>
</menu>

從上邊的代碼可以看到根布局是一個<menu/>,在<group/>下可以可以放置多個item,group設(shè)置 android:checkableBehavior="single"可以將group下的item設(shè)為單選的狀態(tài)

我們還可以給NavigationView添加屬性 設(shè)置item上title文字的顏色

app:itemTextColor="@color/selector_button_text_color"

selector_button_text_color.xml 是放在 /res/color/目錄下的文件歧譬,里面是一個selector的資源文件

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:color="#ffff1155"/> <!-- pressed -->
    <item android:state_checked="true"
        android:color="#ffff0000"/> <!-- checked -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

這樣可以設(shè)置在不同狀態(tài)下顯示不同的顏色加以區(qū)分

2.設(shè)置點(diǎn)擊按鈕滑出側(cè)邊導(dǎo)航

在代碼中添加下面的代碼

    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.nav_ic_drawer);
    } 

然后在onOptionsItemSelected方法中添加點(diǎn)擊事件勿侯,打開側(cè)邊導(dǎo)航

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.add_item:
                toastMsg("click item Add");
                break;
            case R.id.remove_item:
                toastMsg("click item Remove");
                break;
            case R.id.filter_item:
                toastMsg("click item filter");
                break;
            case android.R.id.home:
                drawerLayout.openDrawer(GravityCompat.START);
                break;
            default:
                break;
        }
        return true;
    }

在Activity中調(diào)用NavigationView的setNavigationItemSelectedListener方法設(shè)置菜單選擇監(jiān)聽

做到這里一個側(cè)滑菜單已經(jīng)完成了,效果如圖所示


將側(cè)滑導(dǎo)航高度設(shè)置成full_screen

做完上面的工作缴罗,側(cè)邊滑出的導(dǎo)航會從狀態(tài)欄底部開始繪制助琐,要想在縱向方向全屏需要做兩件事

1.把狀態(tài)欄的顏色設(shè)置為透明,可以在所用的主題中將statusBarColor設(shè)置為透明面氓,

2.給根布局(<android.support.v4.widget.DrawerLayout/>)設(shè)置屬性 android:fitsSystemWindows="true"

因?yàn)闋顟B(tài)欄透明只在Android5.0(API 21)及更高的版本中才提供兵钮,所以我們需要給不支持狀態(tài)欄設(shè)為透明的情況準(zhǔn)備備用主題樣式

這里我們在res/values-v21/style.xml中新建一個主題樣式命名為FruitActivityTheme,并讓它繼承之前的AppTheme,設(shè)置狀態(tài)欄為透明的

<style name="FruitActivityTheme" parent="AppTheme">
        <item name="android:statusBarColor">@android:color/transparent</item>
</style>

然后在res/values/style.xml中寫一個名稱相同舌界,但不設(shè)置statusBarColor為透明的主題樣式如:

<style name="FruitActivityTheme" parent="AppTheme">

</style>

最后在AndroidManifelst.xml中的MainActivity的<activity/>中設(shè)置這個theme即可

這樣在Android5.0之前的設(shè)備運(yùn)行時就會執(zhí)行values文件夾下面的樣式掘譬,Android5.0或更高版本的就會執(zhí)行values-v21下面的樣式。

完成后的效果如圖所示:


在Android5.0 以下的手機(jī)系統(tǒng)中運(yùn)行效果如圖所示:


實(shí)現(xiàn)一個側(cè)滑菜單欄就是這么簡單呻拌,下一篇我們將學(xué)習(xí)TabLayout的用法實(shí)現(xiàn)葱轩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市藐握,隨后出現(xiàn)的幾起案子靴拱,更是在濱河造成了極大的恐慌,老刑警劉巖猾普,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袜炕,死亡現(xiàn)場離奇詭異,居然都是意外死亡初家,警方通過查閱死者的電腦和手機(jī)偎窘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溜在,“玉大人陌知,你說我怎么就攤上這事∫蠢撸” “怎么了仆葡?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長培遵。 經(jīng)常有香客問我浙芙,道長登刺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任嗡呼,我火速辦了婚禮纸俭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘南窗。我一直安慰自己揍很,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布万伤。 她就那樣靜靜地躺著窒悔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敌买。 梳的紋絲不亂的頭發(fā)上简珠,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音虹钮,去河邊找鬼聋庵。 笑死,一個胖子當(dāng)著我的面吹牛芙粱,可吹牛的內(nèi)容都是我干的祭玉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼春畔,長吁一口氣:“原來是場噩夢啊……” “哼脱货!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起律姨,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤振峻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后线召,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺韧,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年缓淹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塔逃。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡讯壶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湾盗,到底是詐尸還是另有隱情伏蚊,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布格粪,位于F島的核電站躏吊,受9級特大地震影響氛改,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜比伏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一胜卤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赁项,春花似錦葛躏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悔醋,卻和暖如春摩窃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芬骄。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工偶芍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人德玫。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓匪蟀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宰僧。 傳聞我的和親對象是個殘疾皇子材彪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 隨著今年4月琴儿,26歲女作家林奕含自殺段化,留下《房思琪的初戀樂園》小說,內(nèi)容是女主角遭到補(bǔ)習(xí)班老師性侵的故事造成,...
    monsterKM閱讀 216評論 0 3
  • 彭小六分享會到現(xiàn)在記憶猶新,還記得那天下著雨鼓鲁,但是依舊在一大早很興奮的從許昌趕到鄭州參加活動蕴轨。 這次活動對我的影響...
    月亮人兒閱讀 295評論 1 1
  • 照片 安靜地畫畫。 A4藕Э裕卡(其實(shí)真應(yīng)該用大一些的篇幅) 霹靂馬油性彩鉛 過程如下: 相比原照橙弱,對動作服飾做了改動...
    陳狂閱讀 3,848評論 34 108
  • 去年6月15日,母親留下一句: ‘’快!去叫你二姐和二姐夫棘脐,我要走了P笨稹!‘’ 表弟慶國一聲喊蛀缝,我從對面沖進(jìn)母親...
    再瘦一丟丟閱讀 210評論 0 0