zoukankan      html  css  js  c++  java
  • Android Design Support Library(二)用NavigationView实现抽屉菜单界面

    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源码下载

  • 相关阅读:
    php 解析富文本编辑器中的hmtl内容,富文本样式正确输出
    thinkphp 中区块block和模板继承extend用法举例
    RabbitMQ安装
    the temporary upload location [/tmp/tomcat.4519862041770988807.8082/work/Tomcat/localhost/ROOT] is not valid
    java.lang.UnsupportedOperationException
    containsAll
    mysql 函数 group_concat 长度限制
    Linux安装jdk8
    nginx实现负载均衡
    linux系统服务器复制文件到另一台服务器上
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6768388.html
Copyright © 2011-2022 走看看