Android Design Support Library(二)用NavigationView實(shí)現(xiàn)抽屜菜單界面

NavigationView在MD設(shè)計(jì)中非常重要,之前Google也提出了使用DrawerLayout來實(shí)現(xiàn)導(dǎo)航抽屜拄踪。這次拳魁,在Android Design Support Library中,Google提供了NavigationView來實(shí)現(xiàn)導(dǎo)航菜單界面姚糊。

這次我們寫的代碼在Android用TabLayout實(shí)現(xiàn)類似網(wǎng)易選項(xiàng)卡動(dòng)態(tài)滑動(dòng)效果這篇文章代碼的基礎(chǔ)上進(jìn)行修改授舟,所以最好先看看上面這篇文章

首先仍舊是配置build.gradle:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:design:22.2.0'
    compile 'com.android.support:recyclerview-v7:22.2.0'
    compile 'com.android.support:cardview-v7:22.2.0'
}

'com.android.support:design:22.2.0'com.android.support:design:22.2.0就是我們需要引入的Android Design Support Library释树,其次我們還引入了Recyclerview和Cardview。

主界面布局(activity_tab_layout.xml)

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout
    android:id="@+id/dl_main_drawer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".TabLayoutActivity"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorColor="#ADBE107E"
            app:tabMode="scrollable"/>

        </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nv_main_navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/navigation_header"
        app:menu="@menu/drawer_view"/>
</android.support.v4.widget.DrawerLayout>

DrawerLayout標(biāo)簽包含了主界面的布局以及抽屜的布局,NavigationView標(biāo)簽下app:headerLayout="" 可以引入頭部文件
app:menu=""則引入菜單的布局寂纪。

頭部布局文件(navigation_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="150dp"
              android:background="?attr/colorPrimaryDark"
              android:orientation="horizontal"
              android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="50dp"
        android:background="@drawable/ic_user"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_gravity="center_vertical"
        android:text="Liuwangshu"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1"
        android:textSize="20sp"/>

</LinearLayout>

菜單布局文件(drawer_view.xml)

<?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_home"
            android:icon="@drawable/ic_dashboard"
            android:title="首頁"/>
        <item
            android:id="@+id/nav_messages"
            android:icon="@drawable/ic_event"
            android:title="事項(xiàng)"/>
        <item
            android:id="@+id/nav_friends"
            android:icon="@drawable/ic_headset"
            android:title="音樂"/>
        <item
            android:id="@+id/nav_discussion"
            android:icon="@drawable/ic_forum"
            android:title="消息"/>
    </group>

    <item android:title="其他">
        <menu>
            <item
                android:icon="@drawable/ic_dashboard"
                android:title="設(shè)置"/>
            <item
                android:icon="@drawable/ic_dashboard"
                android:title="關(guān)于我們"/>
        </menu>
    </item>

</menu>

來看看主界面的java代碼(TabLayoutActivity.java)

package com.example.liuwangshu.mytablayout;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.List;

public class TabLayoutActivity extends AppCompatActivity {
    private DrawerLayout mDrawerLayout;
    private ViewPager mViewPager;
    private TabLayout mTabLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tab_layout);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        final ActionBar ab = getSupportActionBar();
        ab.setHomeAsUpIndicator(R.drawable.ic_menu);
        ab.setDisplayHomeAsUpEnabled(true);
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.dl_main_drawer);
        NavigationView navigationView =
                (NavigationView) findViewById(R.id.nv_main_navigation);
        if (navigationView != null) {
            navigationView.setNavigationItemSelectedListener(
                    new NavigationView.OnNavigationItemSelectedListener() {
                        @Override
                        public boolean onNavigationItemSelected(MenuItem menuItem) {
                            menuItem.setChecked(true);
                            mDrawerLayout.closeDrawers();
                            return true;
                        }
                    });
        }
        initViewPager();
    }

navigationView.setNavigationItemSelectedListener對(duì)菜單的條目進(jìn)行了監(jiān)聽柬姚,如果被點(diǎn)擊則將條目設(shè)置為選中狀態(tài)并收回抽屜。當(dāng)然別忘了對(duì)toolbar的菜單選項(xiàng)進(jìn)行監(jiān)聽回調(diào)搬设,否則抽屜就出不來了。
(TabLayoutActivity.java)

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                mDrawerLayout.openDrawer(GravityCompat.START);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

最后運(yùn)行程序來看看效果


github源碼下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迹鹅,一起剝皮案震驚了整個(gè)濱河市贞言,隨后出現(xiàn)的幾起案子该窗,更是在濱河造成了極大的恐慌,老刑警劉巖酗失,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件规肴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡删壮,警方通過查閱死者的電腦和手機(jī)兑牡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亿虽,“玉大人苞也,你說我怎么就攤上這事∨魅希” “怎么了氓涣?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵劳吠,是天一觀的道長巩趁。 經(jīng)常有香客問我淳附,道長蠢古,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任洽糟,我火速辦了婚禮堕战,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘薪介。我一直安慰自己越驻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布记劈。 她就那樣靜靜地躺著诵棵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘶窄。 梳的紋絲不亂的頭發(fā)上距贷,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音现横,去河邊找鬼阁最。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姜盈,可吹牛的內(nèi)容都是我干的配阵。 我是一名探鬼主播示血,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼救拉,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了告喊?” 一聲冷哼從身側(cè)響起壹无,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤斗锭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后岖是,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烈疚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年爷肝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陆错。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡对嚼,死狀恐怖绳慎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情靡砌,我是刑警寧澤珊楼,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站邓了,受9級(jí)特大地震影響媳瞪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛇受,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一兢仰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧把将,春花似錦、人聲如沸请垛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽混稽。三九已至审胚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間菲盾,已是汗流浹背懒鉴。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留临谱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓城豁,卻偏偏與公主長得像抄课,于是被迫代替她去往敵國和親雳旅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子间聊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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