在新版本的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);

然后给tv改下字

tv.setText("Hello world");

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

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

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">

layout="@layout/app_bar_main"

android:layout_width="match_parent"

android:layout_height="match_parent" />

android: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" />

其实这里的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);

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

同时注意

inflateHeaderView:Inflates a View and add it as a header of the navigation menu.

这也就是说我们在进行前面的操作1其实是获得该布局的同时把其加入到抽屉布局中去,这样就会出现下面的情况:

操作2

解决方法也很简单,就是在layout文件中去掉

app:headerLayout="@layout/nav_header_main"

然后就可以获取到里面的控件愉快玩耍了~

补充:

其实如果不用上面的方法的话也是可以直接获取到header的,可以调用

View headerView = navigationView.getHeaderView(0);

来获得头部布局

android开发 抽屉,Android自带抽屉布局及NavigationView的使用相关推荐

  1. 【Android开发】Android入门安装与使用教程——以Android Studio3.6.1为例

    [Android开发]Android入门教程--以Android Studio3.6.1为例 1.为什么要学习Android 2.学习资源 3.安装Android Studio 3.1 下载安装包 3 ...

  2. 【Android开发】Android Studio中进行简单的WebView构建浏览器开发1

    [Android开发]Android Studio中进行简单的WebView构建浏览器开发 第一步:新建一个Android Project 第二步:修改AndroidMainfest.xml文件 第三 ...

  3. 写给Android开发的Android简史

    写给Android开发的Android简史

  4. <Android开发> Android vold - 第三篇 vold 的NetLinkManager类简介

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  5. <Android开发> Android vold - 第四篇 vold 的NetlinkHandler类简介

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  6. <Android开发> Android vold - 第七篇 vold 的runCommand()方法解析

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  7. <Android开发> Android vold - 第二篇 vold 的main()函数简介

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  8. 【Android开发】Android Studio中进行简单的WebView构建浏览器开发2

    [[Android开发]Android Studio中进行简单的WebView构建浏览器开发2 第1步:在上一篇博客的基础上,修改activity_main.xml 第2步:在MainActivity ...

  9. <Android开发> Android vold - 第一篇 vold前言简介

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  10. android 垂直水平居中对齐,Android开发借助LinearLayout实现垂直水平居中布局

    释放双眼,带上耳机,听听看~! 在Android应用程序的开发中,有时需要限制水平和垂直屏幕的切换,今天这篇文章是技术狗小编为大家整理的Android应用借助LinearLayout实现垂直水平居中布 ...

最新文章

  1. java 代理的三种实现方式
  2. DevExpress的DateEdit设置显示日期和时间
  3. OpenCV中使用神经网络 CvANN_MLP
  4. 人文英语学习品牌「友邻优课」携手神策数据 精细化数据分析让每一次互动都有价值
  5. 计算机系统是连续系统,连续系统的计算机模拟
  6. 160 - 47 DueList.2
  7. 利用pushState开发无刷页面切换
  8. Android6.0权限适配及兼容库的实现
  9. PMP更新教材了,怎么备考?
  10. gentoo linux 内核,Gentoo编译内核
  11. 数学差考研考计算机专业,2021考研数学基础差,这4大方法让你快速上手_计算机专业考研...
  12. 泡芙噶的计算机网络(3)-扑朔迷离的Cisco Packet Tracer实验
  13. 【软考中级-网工】1
  14. 【Python 字符视频】Python 实现将抖音视频转换成字符视频
  15. 玩客云5.9千兆固件、docker、青龙面板
  16. python条形码库_python批量生成条形码的示例
  17. Pandas批量拆分Excel与合并Excel
  18. linux下iconv()函数的用法
  19. bootstrap之入门教程
  20. 华为校园招聘笔试题(机考题目)

热门文章

  1. 贪心算法3: 会议安排
  2. matlab rms数据滤波,与RMS相关的5个信息,如何通过RMS结果滤波来提高精度
  3. html图片平移效果,怎么用CSS移动图片?
  4. 手机序列号和IMEI号的区别
  5. 微信小程序毕业设计 基于微信小程序在线考试系统开题报告
  6. 一文详解GATK-HaplotypeCaller 变异检测原理和实战
  7. Python构造树结构应用到城市层级编码
  8. 互联网晚报 | 9月16日星期五 | ​B站回应诉争“哔哩哔哩”商标被驳回;​苹果占国内高端机70%份额;​蔚来手机被曝明年发布...
  9. win10更新完提示未安装任何音频输出设备2019-11-13解决
  10. 微信域名防封接口开发