Android自带抽屉布局及NavigationView的使用(动态加载头部图片,修改user名称)

本文主要是介绍Android自带抽屉布局及NavigationView的使用(动态加载头部图片,修改user名称),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章转自http://www.07net01.com/2015/12/1020892.html
在新版本的android sdk中,谷歌为开发者们带来了很多好用的东西,比如原生抽屉布局,下拉刷新等等,对很不乐意去网上找各种各样乱七八糟的第三方控件的某人真是挺不错的-。-2333

使用起来样子大概是这样的

使用方式也非常简单,如果想省事的话直接利用add Navigation Drawer Activity就行了。
创建活动后,我们可能会对其中的控件动态更新,但是接下来问题就来了。

获取NavigationView的中的控件出现空指针异常

我们在Navigation Drawer Activity中获取控件,第一反应就是直接在onCreateView里调用findViewById,例如我想获取上图中的TextView,假如id为tv_user

TextView tv = (TextView)findViewById(R.id.tv_user);

然后给tvtv.setText(“Hello world”);就会报错说tv为空指针。问题引起其实非常简单,是因为在activity刚创建的时候,Dawer其实是没有打开的,所以布局没有初始化,自然也不能找到其中的空间。一般这种情况我们为了获取这类未初始布局里的空间会使用inflate方法,这里其实处理是类似的,后面会提到。

我们首先了解一下NavigationView的使用,新建一个抽屉活动后,我们可以看到主界面的布局文件是这样的

<?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"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:fitssystemWindows="true"tools:openDrawer="start"><includelayout="@layout/app_bar_main"android:layout_width="match_parent"android:layout_height="match_parent" /><android.support.design.widget.NavigationViewandroid:id="@+id/nav_view"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"android:fitsSystemWindows="true"app:headerLayout="@layout/nav_header_main"app:menu="@menu/activity_main_drawer" /></android.support.v4.widget.DrawerLayout>

其实这里的NavigationView就是左边抽屉拉出来后的布局了~可以看到它有两个属性app:headerLayout和app:menu
其实这两个属性后面就分别是上图中蓝色背景部分的抽屉头和下面的菜单。要对其编辑也很简单,进入ID对应的布局修改即可。

操作1:

前面提到的获取不到控件的方法,可以在onCreate方法中这样来获取

    View headerLayout = navigationView.inflateHeaderView(R.layout.nav_header_main);tv_nav_user = (TextView)headerLayout.findViewById(R.id.tv_nav_username);

通过查看谷歌官方开发文档我们还可以发现几个方法
http://developer.android.com/reference/android/support/design/widget/NavigationView.html

这些方法都是对抽屉布局上的菜单和头布局进行操作时可以使用的。
同时注意

inflateHeaderView:Inflates a View and add it as a header of the navigation menu.
这也就是说我们在进行前面的操作1其实是获得该布局的同时把其加入到抽屉布局中去,这样就会出现下面的情况:出现的是两个头布局。

操作2

解决方法也很简单,就是在layout文件中去掉
app:headerLayout=”@layout/nav_header_main”
然后就可以获取到里面的控件愉快玩耍了~

 View headerLayout = navigationView.inflateHeaderView(R.layout.nav_header_main);text_xingm = (TextView)headerLayout.findViewById(R.id.text_xingm);image_touxiang = (ImageView) headerLayout.findViewById(R.id.image_touxiang1);image_touxiang.setImageResource(R.drawable.ic_test_5);text_xingm.setText("正常");

出现两个头布局,然后去掉app:headerLayout="@layout/nav_header_main"
解决问题
文章转自http://www.07net01.com/2015/12/1020892.html

这篇关于Android自带抽屉布局及NavigationView的使用(动态加载头部图片,修改user名称)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/477688

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(