赞
踩
前言:最近在看大冰的乖,摸摸头。感觉人生其实并没有什么特定的活法。大家都挤破头的生活可能并不是你想要的生活,而你有权利选择自己的生活,但选择归选择,生活的道路注定是坎坷不平,遇到挫折和低谷,也没必要怨天尤人,一蹶不振。遇到顺境,也没必要沾沾自喜,到处炫耀。生活就是这样,起起落落,冷暖自知。用一个平淡的心去品味生活的百态就好了。
NavigationView是material design 之后,为我们提供的一个滑动导航菜单的一个新的实现方案。网上关于NavigationView的教程有很多,今天我也想总结一下NavigationView的使用,方便以后来翻阅和快速上手。
我们来看一下使用NavigationView的侧滑菜单的最终效果:
NavigationView的使用简单教程:
首先,由于是material design 中提供的控件,所以我们要在dependencies中更新一下SDK:
compile 'com.android.support:design:24.2.1'
- <?xml version="1.0" encoding="utf-8"?>
- <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/drawerLayout"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fitsSystemWindows="true"
- tools:context="com.example.navigationviewdemo.MainActivity"
- >
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <android.support.v7.widget.Toolbar
- android:id="@+id/id_toolbar"
- android:layout_width="match_parent"
- android:layout_height="?attr/actionBarSize"
- android:background="?attr/colorPrimary"
- app:layout_scrollFlags="scroll|enterAlways"
- app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
- app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
- app:title="Toolbar"
- app:titleTextColor="#FFF"
-
- />
- <TextView
- android:id="@+id/id_tv_content"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:text="HelloWorld"
- android:textSize="30sp"/>
-
-
- </RelativeLayout>
-
-
- <android.support.design.widget.NavigationView
- android:id="@+id/design_navigation_view"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="left"
- app:headerLayout="@layout/header_just_username"
- app:menu="@menu/menu_drawer"
- ></android.support.design.widget.NavigationView>
- </android.support.v4.widget.DrawerLayout>

- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="200dp"
- android:padding="16dp"
- android:theme="@style/ThemeOverlay.AppCompat.Dark"
- android:background="@color/colorPrimary">
-
- <TextView
- android:layout_alignParentRight="true"
- android:layout_marginRight="30dp"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="VickyWinner的博客"
- android:textSize="16sp"
- android:textColor="#fff"
- android:layout_marginLeft="20dp"
- />
-
- </RelativeLayout>

- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="200dp"
- android:padding="16dp"
- android:theme="@style/ThemeOverlay.AppCompat.Dark"
- android:background="@color/colorPrimary">
-
- <TextView
- android:id="@+id/userName"
- android:layout_alignParentRight="true"
- android:layout_marginRight="30dp"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="VickyWinner的博客"
- android:textSize="16sp"
- android:textColor="#fff"
- android:layout_marginLeft="20dp"
- />
-
- </RelativeLayout>

- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <group >
- <item android:id="@+id/item1"
- android:icon="@mipmap/ic_launcher"
- android:checkable="true"
- android:title="item1"
- />
- <item android:id="@+id/item2"
- android:icon="@mipmap/ic_launcher"
- android:title="item2"
- android:checkable="true"
- />
- <item android:id="@+id/item3"
- android:icon="@mipmap/ic_launcher"
- android:title="item3"
- android:checkable="true"
- />
-
- </group>
- <item android:title="Sub items">
- <menu>
- <item
- android:id="@+id/item4"
- android:icon="@mipmap/ic_launcher"
- android:checkable="true"
- android:title="Sub item 1"/>
- <item
- android:id="@+id/item5"
- android:icon="@mipmap/ic_launcher"
- android:checkable="true"
- android:title="Sub item 2"/>
- </menu>
- </item>
-
- </menu>

- package com.example.navigationviewdemo;
-
- import android.support.annotation.NonNull;
- import android.support.design.widget.NavigationView;
- import android.support.v4.view.GravityCompat;
- 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 android.view.View;
- import android.widget.TextView;
- import android.widget.Toast;
-
- public class MainActivity extends AppCompatActivity {
- private DrawerLayout mDrawerLayout;
- private NavigationView mNavigationView;
- private Toolbar mToolbar;
- private TextView id_tv_content;
- private TextView userName;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //实例化控件
- mDrawerLayout= (DrawerLayout) findViewById(R.id.drawerLayout);
- mNavigationView= (NavigationView) findViewById(R.id.design_navigation_view);
- mToolbar= (Toolbar) findViewById(R.id.id_toolbar);
- // 为ToolBar设置一个导航按钮,我随便用了一个星星的按钮
- mToolbar.setNavigationIcon(android.R.drawable.btn_star);
- id_tv_content= (TextView) findViewById(R.id.id_tv_content);
-
-
- View headerView=mNavigationView.getHeaderView(0);
- userName= (TextView) headerView.findViewById(R.id.userName);
-
- // 设置我们的ToolBar
- setSupportActionBar(mToolbar);
- //为导航按钮设置监听事件,这里一定要在setSupportActionBar(mToolbar);方法之后,不然会报错
- mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mDrawerLayout.isDrawerOpen(mNavigationView)){
- mDrawerLayout.closeDrawers();
- }else {
- mDrawerLayout.openDrawer(mNavigationView);
- }
- }
- });
-
- setupDrawerContent(mNavigationView);
- }
- //添加监听
- private void setupDrawerContent(NavigationView navigationView)
- {
- navigationView.setNavigationItemSelectedListener(
-
- new NavigationView.OnNavigationItemSelectedListener()
- {
-
- @Override
- public boolean onNavigationItemSelected(MenuItem menuItem)
- {
- //监听Item事件
- switch (menuItem.getItemId()){
- case R.id.item1:
- id_tv_content.setText("Item1");
- break;
- case R.id.item2:
- id_tv_content.setText("Item2");
- break;
- case R.id.item3:
- id_tv_content.setText("Item3");
- break;
- case R.id.item4:
- id_tv_content.setText("Item4");
- break;
- case R.id.item5:
- id_tv_content.setText("Item5");
- break;
- }
- menuItem.setChecked(true);
- mDrawerLayout.closeDrawers();
- return true;
- }
-
- });
-
- }
-
-
-
- }<pre class="java" name="code">

最后要提醒一下,由于我们自己设置了Toolbar,所有我们要在Style文件中将主题设置成NoActionBar。:
- <resources>
-
- <!-- Base application theme. -->
- <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
- <!-- Customize your theme here. -->
- <item name="colorPrimary">@color/colorPrimary</item>
- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
- <item name="colorAccent">@color/colorAccent</item>
- </style>
-
- </resources>
-
在NavigationView中,有时候我们的业务逻辑可能需要获取到Head中的一些控件,比如,在这里,我们我们希望获取到我们Head中的Text,这时候如果我们像往常一样直接findViewById的话,就会遇到空指针的错误,因为在这里我们获取到的控件为Null。那我们怎么获取到Head中的空间呢?
其实很简单,我们需要先通过NavigationView获取到Head的View,然后通过这个View获取到Head的控件:
- View headerView=mNavigationView.getHeaderView(0);
- userName= (TextView) headerView.findViewById(R.id.userName);
通过以上代码,我们就能获取到我们Head中的任意控件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。