Android Material Design NavigationView

Android 实现左侧导航栏:NavigationView是什么?NavigationView和Navigation搭配使用 1)左侧导航栏效果图2)NavigationView是什么?3)NavigationView和Navigation搭配使用4)NavigationView的其他方法。 阅读详情

       侧滑菜单DrawerLayout滑动出来的菜单,我们可以自己写一些觉得不错的布局。(如果对DrawerLayout陌生的话请点击这篇博客:Android Material Design DrawerLayout)

      也可以使用Google最新推出规范式设计中的NavigationView和DrawerLayout结合实现侧滑菜单栏效果,NavigationView继承自FrameLayout。一般用于应用的导航菜单,菜单的内容来自于menu文件。所谓的谷歌设计思想估计就是这样咯!风格上得到一个大致统一的美观,同时也给程序员节省时间。

     NavigationView是帮助DrawerLayout管理侧滑菜单的布局,所以NavigationView由两部分组成,一个头部布局HeaderView,一个是menu文件夹下的内容布局。

      使用NavigationView。我们需要添加依赖包:

compile 'com.android.support:design:23.4.0'

咱们还是从例子中更好的去了解NavigationView吧!

头部布局HeaderView:右击layout--New---Layout resource file创建一个新的文件header_layout.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="200dp"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:scaleType="centerCrop"
        android:src="@drawable/pigu"/>
</LinearLayout>

menu文件夹下的内容布局:右击res文件夹--New--Directory,创建一个menu文件夹;然后右击menu文件夹--New--Layout resource file创建一个新的文件nav_menu.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_more"
            android:icon="@drawable/ic_more"
            android:title="more" />
        <item android:id="@+id/nav_left"
            android:icon="@drawable/ic_left"
            android:title="left"/>
        <item android:id="@+id/nav_delete"
            android:icon="@drawable/ic_delete"
            android:title="delete"/>
        <item android:id="@+id/nav_share"
            android:icon="@drawable/ic_share_black"
            android:title="share"/>
        <item android:id="@+id/nav_de"
            android:icon="@drawable/ic_dehaze"
            android:title="de"/>
    </group>
</menu>

侧滑菜单DrawerLayout布局:layout_drawerlayout.xml

<?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_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </FrameLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="322dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/header_layout"
        app:menu="@menu/nav_menu">

    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

其中:

  • android:layout_gravity可设置抽屉,也就是NavigationView从左边或是右边打开。
  • app:menu用于设置菜单内容的xml布局。
  • app:headerLayout用于设置NavigationView的HeaderView的xml布局文件。

最后是主布局:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.dell.navigationview.MainActivity">

    <!--DrawerLayout-->
    <include layout="@layout/layout_drawerlayout"/>

</LinearLayout>

Java代码没有写什么代码,就不贴了,直接运行看效果:

NavigationView点击事件:分为两种点击事件,一种是头部布局点击事件,另一种是内容布局的点击事件。

一:头部事件:

处理头部点击事件,我们需要先获得到头部控件,在Java代码中我们可以通过下面的方式获得头部控件,然后通过调用headerView中的findViewById方法来查找到头部的控件,设置点击事件即可。

//获取头布局文件  
View headerView = mNavigationView.getHeaderView(0);

二:内容事件:Java代码

public class MainActivity extends AppCompatActivity {
    private DrawerLayout mDrawerLayout;
    private NavigationView mNavigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLayout();
    }
    public void initLayout(){
        mDrawerLayout=(DrawerLayout) findViewById(R.id.drawer_layout);
        mNavigationView=(NavigationView) findViewById(R.id.navigation_view);
        //将more菜单项设置为默认选中
        mNavigationView.setCheckedItem(R.id.nav_more);
        mNavigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.nav_more:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_left:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_delete:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_share:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_de:
                        //逻辑代码想干啥干啥
                        break;
                }
                return true;
            }
        });
    }
}

NavigationView依附于DrawerLayout,而DrawerLayout又常常和Toolbar一起使用,三个控件一起使用,效果没得说的。在上面例子的基础上,我们来一个NavigationView+DrawerLayout+Toolbar例子:(如果对Toolbar陌生的话请点击这篇博客:Android Material Design Toolbar)

这里我们写入Toolbar控件就好!新增布局:

layout_toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    xmlns:android="http://schemas.android.com/apk/res/android">

</android.support.v7.widget.Toolbar>

主布局也要将这个新增的布局加进来:修改主布局

activity_main.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="match_parent"
    android:orientation="vertical">

    <!--Toolbar-->
    <include layout="@layout/layout_toolbar"/>
    <!--DrawerLayout-->
    <include layout="@layout/layout_drawerlayout"/>

</LinearLayout>

值得注意的是,Toolbar加进来了,别忘了有些地方需要改改:找到values文件夹下的styles.xml文件,把parent这个属性改下,改为隐藏NoActionBar,

parent="Theme.AppCompat.Light.NoActionBar"

最后修改Java代码:

public class MainActivity extends AppCompatActivity {
    private DrawerLayout mDrawerLayout;
    private NavigationView mNavigationView;
    private Toolbar mToolbar;
    private ActionBarDrawerToggle mDrawerToggle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLayout();
        //setSupportActionBar方法将Toolbar实例传入
        //其实就是Toolbar替换Actionbar
        setSupportActionBar(mToolbar);
        //设置还回键可用
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        //DrawerLayout监听打开/关闭事件
        mDrawerToggle=new ActionBarDrawerToggle(this,
                mDrawerLayout,mToolbar,
                R.string.open,R.string.close){
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
            }
        };
        mDrawerToggle.syncState();
        mDrawerLayout.addDrawerListener(mDrawerToggle);
    }
    public void initLayout(){
        mToolbar=(Toolbar) findViewById(R.id.toolbar);
        mDrawerLayout=(DrawerLayout) findViewById(R.id.drawer_layout);
        mNavigationView=(NavigationView) findViewById(R.id.navigation_view);
        //将more菜单项设置为默认选中
        mNavigationView.setCheckedItem(R.id.nav_more);
        //NavigationView内容点击事件
        mNavigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.nav_more:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_left:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_delete:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_share:
                        //逻辑代码想干啥干啥
                        break;
                    case R.id.nav_de:
                        //逻辑代码想干啥干啥
                        break;
                }
                return true;
            }
        });
    }
}

效果图:

 

 

Android Material Design 系列之 DrawerLayout + NavigationView 使用详解 前言 DrawerLayout 是 Support Library 包中实现了侧滑菜单效果的控件,可以说 DrawerLayout 是因为第三方控件如 MenuDrawer 等的出现之后,google 借鉴而出现的产物。DrawerLayout 分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(DrawerLayout 自身特性),主内容区的内容可以随着菜单的点击而变化。 一、DrawerLayout 基础使用 DrawerLayout 其实是一个布局控件,继承 ViewGroup,与 Lin 阅读详情

相关推荐

Android 开发之Android Material Design NavigationView侧滑界面自定义

Android 开发之Android Material Design NavigationView侧滑界面自定义 一、侧滑界面Menu自定义: 在menu文件夹下新建activity_main_drawer.xml文件,自定义标题和icon: <itemandroid:id="@+id/nav_forWhy" android:icon="@drawabl

u013258657的专栏 1370

Android5.0之NavigationView的使用

导航菜单的制作方式多种多样,网上也有各种炫酷效果的具体实现方式,那么今天我主要是想来说说Google在Android5.0之后推出的NavigationView的具体使用方式。NavigationView在很多App上都已经可以看到其效果图,国内的比如知乎(侧拉菜单滑出来的那一部分属于NavigationView),如下图:还有Google自己的那些app,也基本全都采用了Navigation...

weixin_30580943的博客 1100

Android Material Design 之滑动菜单(之NavigationView)

在这篇Android Material Design 之滑动菜单(之DrawerLayout控件及其导航按钮HomeAsUp)文章中,DrawerLayout实现的滑动菜单中,DrawerLayout第二直接子控件(即滑动菜单内容区域)仅仅使用TextView太过单调,所以要想滑动菜单漂亮,可以把DrawerLayout第二直接子控件(即滑动菜单内容区域)用NavigationView实现。 N...

LJW874362735的博客 441

NavigationView导航视图与DrawerLayout绘制布局

NaviagtionView(导航视图)需与DrawerLayout(绘制布局)配合使用。 DrawerLayout中的Navigation有两种表现方式,左划出和右划出,可在标签中使用android:layout_gravity属性设置,值为start时为左划出,为end时为右划出。一个DrawerLayout中可以同时含有左划出和右划出的两个导航视图,和Activity主体空间。 NaviagtionView中有两部分,上部分的header和下部分的menu,可在可在

m0_57150356的博客 1524

Android Material Design实战:TabLayout与NavigationView的结合使用指南

在现代移动应用设计中,良好的用户体验和直观的导航至关重要。Material Design提供了一套全面的设计语言和组件,帮助开发者构建既美观又功能强大的Android应用。在这些组件中,TabLayout和是实现清晰、有组织的用户界面的关键。通过联合使用这两个组件,开发者能够轻松创建出顶部标签导航和侧滑菜单,提升用户在应用内的导航效率。TabLayout是Android Material Design中的一部分,主要用于创建水平方向的标签页,为用户提供了丰富的交互式体验。

weixin_32311823的博客 1132

android NavigationView的使用

android NavigationView的使用

DrawerLayout和NavigationView使用详解

Android Material Design Library 推出了很长时间,越来越多的APP使用了符合Library 包的控件,DrawerLayout绝对是热门之一,Material Design定义了一个抽屉导航应该有何种外观和感受,统一了侧滑菜单和样式。

丿歌吟有梦 705

AMSR-2数据下载实战:从JAXA到LPRM的算法选择与效率优化

本文详细介绍了AMSR-2数据的下载实战,重点对比了JAXA与LPRM算法的差异及适用场景,并提供了高效下载方案和网络优化策略。通过实际案例和代码示例,帮助用户快速获取和处理AMSR-2数据,提升研究效率。

rl6adventurer的博客 691

Android开发侧边栏(DrawerLayout、NavigationView、Toolbar),Java && Kotlin(主要用于个人的学习记录)

Android开发侧边栏(DrawerLayout、NavigationView、Toolbar),Java && Kotlin

qq_63050093的博客 4374

INCA软件操作指南:手把手教你生成和解析DCM标定数据文件

本文详细介绍了INCA软件在汽车ECU开发中生成和解析DCM标定数据文件的全流程。从A2L文件导入到DCM文件生成,再到HEX文件导出,手把手教你掌握标定数据处理的实用技巧,包括参数标定、曲线标定和常见问题排查,帮助工程师提升工作效率。

weixin_29271053的博客 1052

机器学习篇-KNN算法实现鸢尾花模型和手写数字识别模型

一个样本最相似的k个样本中的大多数属于某一个类别, 则该样本也属于这个类别类似于: 近朱者赤近墨者黑回归机器建模流程:数据获取数据基本处理(空值和非法值)特征工程(特征提取, 特征预处理(归一化, 标准化), 特征降维, 特征选择, 特征组合)模型训练模型预测模型评估# 1. 定义函数 dm01_load_iris(), 用于加载 鸢尾花数据集, 并简单查看下数据集的各部分.# 1. 加载数据集.​# 2. 打印iris_data, 发现其实是1个: 字典.​。

m0_60916732的博客 2403

Android Material Design控件之NavigationView

Material Design 之NavigationView item样式自定义; item点击事件;

LinWeiJ的博客 2404

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。

jasonj333 1159

android 开发 -- NavigationView和DrawerLayout实现 侧滑栏(Material Design)

随着 Google I/O 2015,新的 Android Design Support Library 给开发者带来了一些重要的 Material Design 组件,并且向下兼容到 Android 2.1, NavigationView 就是其中之一,可用于方便地创建导航抽屉。 如果需要向下兼容,所以以下内容的 Activity 均继承于 AppCompatActivity ,

蔡小波的博客 2818

PCL 加权局部最优投影(WLOP)简化算法

WLOP算法是一种点云重采样方法,通过迭代优化实现点云均匀化和特征保留。算法包含数据项(加权平均位置保持几何特征)和正则化项(排斥邻近点实现均匀分布)两部分。代码实现基于PCL库,通过KD树加速邻域搜索,使用高斯权重函数计算点位置更新。参数包括输出点比例、邻域半径、正则化权重和迭代次数。该算法不依赖网格信息,适合处理大规模扫描数据的预处理优化。

点云侠的博客 628

[特殊字符] 从零构建携程/飞猪机票价格爬虫:Python异步抓取与反爬对抗实战

在出行决策、竞品分析、价格预测模型训练等场景中,稳定获取携程(Ctrip)和飞猪(Fliggy)的实时机票价格波动数据是刚需。然而,这两大平台均部署了业界顶尖的反爬体系——包括但不限于:动态请求签名(SignToken设备指纹采集(UACanvasWebGL接口参数加密(X-Sign_abtestcookie混淆)频率限制与 IP 封禁(滑动窗口 + 行为检测)目录前言:为什么需要自建机票价格爬虫?一、技术选型与项目架构1.1 核心技术栈1.2 系统架构图(文字描述)1.3 法律与道德声明。

2201_76125261的博客 337

Android:Material Design之NavigationView使用

Android:Material Design之NavigationView使用

a526001650a的专栏 555

EtherCAT主站SOEM -- 0 -- 该EtherCAT主站SOEM专栏后续安排

SOEM(Simple Open EtherCAT Master)是一个开源的EtherCAT主站库,允许开发者构建自定义的EtherCAT主站应用程序。EtherCAT是一种实时以太网通信协议,广泛应用于工业自动化和机器控制领域。开源性质:SOEM是一个开源项目,这意味着开发者可以自由地查看、修改和分发代码。这使其成为工业自动化领域的一个强大工具,可以根据具体需求进行定制。EtherCAT主站实现:SOEM库提供了一个完整的EtherCAT主站实现,允许主站与多个EtherCAT从站设备进行通信。

常驻客栈的博客--嵌入式EtherCAT 6659

Android Material Design 之 NavigationView

DrawerLayout在讲 NavigationView 之前,我们先来回顾一下 DrawerLayout。 DrawerLayout 是抽屉导航控件,在 v4 包中。(Android Studio 创建项目时会自动加入 v7 包,而 v7 包是包含 v4 包的,所以不需要再导入 v4 包了)布局文件<?xml version="1.0" encoding="utf-8"?> <android.

teletian的专栏 1087

海德汉机床采集数据

海德汉数控系统我一般在高端机床上见得比较多。有好多五轴加工精度比较高的机床都用的是海德汉的系统。市面上常见的有530和640等型号。海德汉的采集还是有点难度的,需要对SDK有深度的了解。

若云流风的专栏 1526

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android Material Design: NavigationView抽屉导航菜单

Android Material Design: NavigationView抽屉导航菜单 之前我写了一篇关于实现Android抽屉导航菜单栏的文章《基于Android官方DrawerLayout实现抽屉导航菜单》,文章链接地址:http://blog.youkuaiyun.com/zhangphil/article/details/48710453 在最新的Android Material Desi

Zhang Phil 3738

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android界面侧滑,Android 开发之Android Material Design NavigationView侧滑界面自定义

Android 开发之Android Material Design NavigationView侧滑界面自定义一、侧滑界面Menu自定义:在menu文件夹下新建activity_main_drawer.xml文件,自定义标题和icon:android:title="十万个为什么"/>android:title="百科知识"/>android:title="科普博览"/>andr...

weixin_29745227的博客 285

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android Material Design之NavigationView

1.概述 NavigationView是Design Support库中提供的一个控件,要使用的话需要将这个库引入项目中才行,如下所示: dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:a...

云上道人的博客 336

Android Material Design之TabLayout + NavigationView联合使用

这是写的第二篇关于Android Material Design的文章,第一篇着重讲了CoordinatorLayout (协调容器)和CollapsingToolbarLayout (可折叠式布局)的基本应用。这一篇我们来看一看如何用TabLayout + NavigationView来仿照网易新闻等的导航栏。先看看实现效果:侧边导航的效果是:嘿嘿,大爱琅琊榜。项目涉及到的基本知识: TabLay

happy_horse的博客 3280

Android Material Design 控件 NavigationView

1 开始使用 compile 'com.android.support:design:25.3.1' 2 滑动菜单不覆盖Toolbar <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_pa

louisgeek的专栏 259
上一篇: Android ViewPager +Fragment+TabLayout 实现滑动导航栏
下一篇: Android Material Design悬浮按钮和可交互提示
小红妹
博客等级 码龄10年 151粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值