Android Design Library之三: NavigationView

簡介

要想實現抽屜式的效果,在以前咱們大都是使用的SlidingMenu等第三方庫。不過Google發佈了DrawerLayout來實現相同的效果。各有優缺點吧。這裏咱們介紹NavigationView的使用。
先來看下最終的效果。
NavigationView效果java

Demo

先看下實際運行的效果。感受仍是蠻不錯的吧android

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

   

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:background="@color/main"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:title="Title"
            app:titleTextColor="@color/white"/>
    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_main"
        android:layout_width="250dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/layout_nav_header"
        app:itemIconTint="@null"
        app:itemTextColor="#009688"
        app:menu="@menu/nav"/>
</android.support.v4.widget.DrawerLayout>

須要注意的是,須要按照官方文檔中的說明將你的佈局放在NagigationView的上方。否則會有一些意想不到的效果,就由於這個,以前吃了挺大的虧。
經過headerLayout設置menu的頭視圖。經過menu屬性設置每個item。
NavigationView有幾個屬性:git

  • itemBackground : 設置每個item的背景顏色。
  • itemIconTint: 改變menu中的圖標顏色
  • itemTextAppearance:設置每一個item的字體樣式。
  • itemTextColor:設置每一個item的文字顏色。

Toggle

設置toggleDrawerLayout進行聯動。方法很簡單。就幾句代碼。github

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.open, R.string.close);
 toggle.syncState();
 drawer.addDrawerListener(toggle);

item 點擊時間。

經過設置NavigationItemSelectedListener來爲每個條目設置點擊事件。app

navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.nav_music:
                        break;
                    case R.id.nav_movie:
                        break;
                    case R.id.nav_setting:
                        break;
                }
                return false;
            }
        });

監聽back

當抽屜展開的時候,點擊返回按鈕收起收起,代碼很簡單。ide

@Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

完成代碼

GitHub地址佈局

相關文章
相關標籤/搜索