NavigationView基本使用

本文為原創(chuàng)陌僵,轉(zhuǎn)載請注明出處http://www.reibang.com/p/e1781381d086
先來張效果圖感官認識一下

7B1300F1A2F9AEAB084801B4FC3A3238.jpg

1. 綁定Header

在布局文件的NavigationView定義中添加app:headerLayout="@layout/nav_header_main"艾岂,效果就是上圖顯示的有圖片背景區(qū)域所在的那一部分。
這樣綁定發(fā)現(xiàn)HeaderLayout中的android:fitsSystemWindows="true"屬性不起作用

通過NavigationView的getHeaderView(Int)方法可以獲取到HeaderLayout對應的View范嘱,從而通過View的findViewById方法進一步操作子View。

2.綁定菜單

app:menu="@menu/home_left_drawer_menu"

示例:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group>
        <item
            android:icon="@drawable/ic_setting_24dp"
            android:title="設置" />
    </group>
       <item android:title="中間菜單"/>
    <group>
        <item
            android:icon="@drawable/ic_setting_24dp"
            android:title="設置" />
    </group>
</menu>

<item>就是定義一個菜單項若贮。
<group>是對菜單進行分組奈应,網(wǎng)上說用了這個標簽把菜單包起來之后,這一組菜單的頂部就會顯示一個分割線账磺,如上圖效果圖中的那條橫線

**實際用上述代碼芹敌,并不會產(chǎn)生分割線,這個標簽僅僅是定義分組垮抗,然后可以具備一個組的一些性質(zhì)氏捞,具體見group標簽的屬性
備注:這個描述有一定問題,后面會說明
**

使用上面定義的菜單冒版,運行效果如下:

11261F12-D894-4617-BF4C-9A04849519C8.png

那分割線是如何來的
示例如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="菜單1"/>
    <item android:title="菜單2標題">
        <menu>
            <item
                android:icon="@drawable/qr_logo"
                android:title="子菜單1" />
            <item
                android:icon="@drawable/ic_setting_24dp"
                android:title="子菜單2" />
        </menu>
    </item>
</menu>

我門可以直觀的從上面發(fā)現(xiàn)液茎,‘菜單2標題’包涵了一個子<menu>的定義,運行效果如下:

7A19136B-893D-436C-AC6C-1314412FF3FE.png

這種情況辞嗡,子<menu>所在的<Item>頂部就會有一條分割線捆等,但是有點不同的就是‘菜單2標題’就類似于標題一樣的存在了,跟‘子菜單1’欲间,‘子菜單2’有所區(qū)別楚里。

這下子,分割線是有了猎贴,并且還額外贈送了一個標題班缎,但是有些時候我門并不希望有標題的存在,我們僅僅是想在菜單之間增加一些分割線進行分組她渴,那如果實現(xiàn)呢达址?
在后來的使用中發(fā)現(xiàn),之前上面添加了‘備注’地方的語句表述有一定問題趁耗。

<group>標簽能夠產(chǎn)生分割線沉唠,關鍵點在于設置group的id值

3. 設置菜單圖標顏色

app:itemIconTint="@color/colorPrimary"
在上面的最后一張效果圖中,大家應該能夠發(fā)現(xiàn)苛败,‘子菜單1’的圖標是黑黑的一坨满葛,但是實際這個圖標是一個基本的png圖標,是有顏色有形狀的罢屈。那為什么是黑乎乎的一坨呢嘀韧,我門先指定以下圖標的顏色看下效果。

1DB5BA94-903C-4B5B-995E-528DBA4126E7.png

圖片‘子菜單2’良好的運行了缠捌,‘子菜單1’應該也算良好的運行了(從黑乎乎的一坨變成了有顏色的一坨)锄贷。
這下我門來分析一下兩者的區(qū)別。

  • 先直接說‘菜單2’,這個圖標我是使用的矢量圖谊却。
  • 那xml邊寫的shape會不會像矢量圖那樣的效果呢柔昼?
    我寫了一個shape,代碼如下炎辨,使用的時候也是黑黑的一坨捕透。效果圖就不上了,因為這是我后來測試驗證的蹦魔。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="@android:color/white"/>
    <stroke
        android:width="1dp"
        android:color="@color/black" />
</shape>
  • ‘菜單1’是一個常規(guī)的PNG圖標
    其實從上面的兩張效果圖可以隱約猜想激率,設置那個屬性就好比是在菜單的上面弄了一層遮罩,那么我門就去掉這個遮罩勿决。
    先嘗試app:itemIconTint="@null",這樣設置之后乒躺,菜單是顯示了自身的顏色,但也僅僅只是‘菜單2’低缩,菜單1還是一坨嘉冒。
    關鍵方法:調(diào)用NavigationView.setItemIconTintList(null)進行設置,這樣菜單就可以顯示自身的效果了

4. 動態(tài)隱藏菜單項

使用NavigationView.getMenu().findItem(int id)即可獲取到MenuItem對象咆繁,然后調(diào)用setVisible(boolean)方法設置即可讳推。

上述就是對NavigationView的基本使用,其它的就是去了解NavigationView/Menu的屬性玩般。

完成上述簡單操作之后银觅,來一張完成的效果圖

4C523F37B1221F32E96EDC24F969CB44.jpg

menu.xml的代碼:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:icon="@drawable/ic_home_tab_favor"
        android:title="菜單1" />
    <item
        android:icon="@drawable/ic_setting_24dp"
        android:title="菜單2標題">
        <menu>
            <item
                android:icon="@drawable/qr_logo"
                android:title="菜單2子菜單1" />
            <item
                android:icon="@drawable/ic_setting_24dp"
                android:title="菜單2子菜單2" />
        </menu>
    </item>
    <group android:id="@+id/grp3">
        <item
            android:icon="@drawable/ic_home_tab_favor"
            android:title="菜單3" />
    </group>
    <group android:id="@+id/grp4">
        <item
            android:icon="@drawable/ic_home_tab_favor"
            android:title="菜單4" />
    </group>
</menu>

5.菜單項的點擊效果

創(chuàng)建Selector,然后通過為NavigationView的屬性指定app:itemBackground="@drawable/home_left_drawer_menu_item_bg"
bg_home_left_drawer_menu_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/black" android:state_pressed="true" />
    <item android:drawable="@color/white" android:state_pressed="false" />
</selector>

我在selector中設置了很多屬性坏为,想要改變菜單選中之后的背景究驴,但是沒有處理成功,菜單的選中效果是通過菜單圖標和文字來呈現(xiàn)的

6.設置菜單文字選中效果

創(chuàng)建Selector匀伏,然后通過為NavigationView的屬性指定app:itemTextColor="@drawable/home_left_drawer_menu_item_text"

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorPrimaryDark" android:state_checked="true" />
    <item android:color="#8a8a8a" android:state_checked="false" />
</selector>

7. 去掉菜單滾動條

當NavigationView的菜單條目很多的時候洒忧,上下滑動右邊就會出現(xiàn)一個灰色滾動條,相對比較難看够颠。
添加android:scrollbars="none"屬性熙侍,發(fā)現(xiàn)不起作用。因為滾動條本身不是在NavigationView上履磨,而是在NavigationView的一個子View上蛉抓,也就是NavigationMenuView。

myNavView = (NavigationView) this.findViewById(R.id.myNavView);
View menuView = myNavView.getChildAt(0);
if(menuView != null && menuView instanceof NavigationMenuView){
   menuView.setVerticalScrollBarEnabled(false);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剃诅,一起剝皮案震驚了整個濱河市巷送,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌综苔,老刑警劉巖惩系,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異如筛,居然都是意外死亡堡牡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門杨刨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晤柄,“玉大人,你說我怎么就攤上這事妖胀〗婢保” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵赚抡,是天一觀的道長爬坑。 經(jīng)常有香客問我,道長涂臣,這世上最難降的妖魔是什么盾计? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮赁遗,結(jié)果婚禮上署辉,老公的妹妹穿的比我還像新娘。我一直安慰自己岩四,他們只是感情好哭尝,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剖煌,像睡著了一般材鹦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上末捣,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天侠姑,我揣著相機與錄音,去河邊找鬼箩做。 笑死莽红,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的邦邦。 我是一名探鬼主播安吁,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼燃辖!你這毒婦竟也來了鬼店?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤黔龟,失蹤者是張志新(化名)和其女友劉穎妇智,沒想到半個月后滥玷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡巍棱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年惑畴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片航徙。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡如贷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出到踏,到底是詐尸還是另有隱情杠袱,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布窝稿,位于F島的核電站楣富,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伴榔。R本人自食惡果不足惜菩彬,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潮梯。 院中可真熱鬧骗灶,春花似錦、人聲如沸秉馏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萝究。三九已至免都,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帆竹,已是汗流浹背绕娘。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留栽连,地道東北人险领。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像秒紧,于是被迫代替她去往敵國和親绢陌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程熔恢,因...
    小菜c閱讀 6,358評論 0 17
  • 側(cè)滑菜單這種設計脐湾,在很多 APP 上面都有看到,例如大版本3.0之前的知乎叙淌、網(wǎng)易新聞秤掌、滴滴打車等愁铺。有些熱衷于 An...
    GinkWang閱讀 25,003評論 2 35
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • 一次短暫而快樂的旅行結(jié)束了,帶著快樂闻鉴、開心和一身的風塵回到家里帜讲,回憶這兩天的行程,體味“我們在一起”的快樂...
    一衣帶水閱讀 3,042評論 0 0
  • 不是無情椒拗,亦非薄幸,只是我們一生中會遇上很多人获黔,真正停留駐足的又有幾個?生命是終將荒蕪的渡口,連我們自己都是過客彩倚,...
    妖精的替身閱讀 201評論 0 0