Android Design Support Library(二)用NavigationView实现抽屉菜单界面

来源:互联网 发布:学unity3d还是虚幻4 编辑:程序博客网 时间:2024/06/06 17:45

NavigationView在MD设计中非常重要,之前Google也提出了使用DrawerLayout来实现导航抽屉。这次,在Android Design Support Library中,Google提供了NavigationView来实现导航菜单界面。

这次我们写的代码在Android用TabLayout实现类似网易选项卡动态滑动效果这篇文章代码的基础上进行修改,所以最好先看看上面这篇文章

首先仍旧是配置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标签包含了主界面的布局以及抽屉的布局,NavigationView标签下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="事项"/>        <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="设置"/>            <item                android:icon="@drawable/ic_dashboard"                android:title="关于我们"/>        </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对菜单的条目进行了监听,如果被点击则将条目设置为选中状态并收回抽屉。当然别忘了对toolbar的菜单选项进行监听回调,否则抽屉就出不来了。
(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);    }

最后运行程序来看看效果
这里写图片描述

github源码下载

5 0
原创粉丝点击