NavigationView导航视图

2023-11-10 16:52

本文主要是介绍NavigationView导航视图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1. 基础使用方法:

(1) 准备NavigationView的hearderLayout和menu的XML文件

(2) 创建DrawerLayout,并在DrawerLayout放置NavigationView

(3) 设置NavigationView菜单项监听及其他设置

2. 显示自定义菜单项的菜单

(1) 创建自定义菜单项的xml布局文件

(2) 设置菜单项布局为自定义菜单项

(3)设置自定义菜单项中的子控件


NaviagtionView(导航视图)需与DrawerLayout(绘制布局)配合使用。

DrawerLayout中的Navigation有两种表现方式,左划出和右划出,可在<NaviagtionView>标签中使用android:layout_gravity属性设置,值为start时为左划出,为end时为右划出。一个DrawerLayout中可以同时含有左划出和右划出的两个导航视图,和Activity主体空间

NaviagtionView中有两部分,上部分的header和下部分的menu,可在<NaviagtionView>标签中使用android:headerLayout和android:menu属性设置。但这两个部分也可以有不设置的,或都不设置。其中菜单可以为自定义菜单项的菜单。

1. 基础使用方法:

(1) 准备NavigationView的hearderLayout和menu的XML文件

NavigationView默认展示菜单的title和icon的黑色阴影图标,但NavigationView支持显示自定义菜单项布局的菜单,详情请见下文。

<menu>中tools:showIn="navigation_view"可让预览图为菜单在导航视图中的样子。

//  res\layout\navigation_view_header_layout.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"><!-- 该部分为NaviagtionView上部分,高度不能为match_parent,要为menu留空间 !--></RelativeLayout>
//  res\menu\navigation_view_menu.xml<!--  该菜单用于NavigationView下部分 !-->
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"tools:showIn="navigation_view"><itemandroid:id="@+id/item1"android:title="title1"android:icon="@drawable/icon1" /><itemandroid:id="@+id/item2"android:title="title2"android:icon="@drawable/icon2" />
</menu>
(2) 创建DrawerLayout,并在DrawerLayout放置NavigationView

在DrawerLayout中使用tools:openDrawer属性可以使预览图中的NavigationView展开,方便编写。

在DrawerLayout中放入NavigationView后一定要设置android:layout_gravity为start或end,用于设置左划出或右划出。

NaviagtionView中有两部分,上部分的header和下部分的menu,可在可在<NaviagtionView>标签中使用android:headerLayout和android:menu属性设置。但这两个部分也可以有不设置的,或都不设置。

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.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:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"tools:openDrawer="start"><com.google.android.material.navigation.NavigationViewandroid:layout_width="250dp"android:layout_height="match_parent"android:id="@+id/navigationView"android:layout_gravity="start"app:headerLayout="@layout/navigation_view_header_layout"app:menu="@menu/navigation_view_menu"/><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><!-- Activity主体空间 !--></RelativeLayout></androidx.drawerlayout.widget.DrawerLayout>
(3) 设置NavigationView菜单项监听及其他设置
//  MainActivity.java
NavigationView navigationView=findViewById(R.id.navigationView);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {public boolean onNavigationItemSelected(MenuItem item) {//选中菜单项执行int menuItemId=item.getItemId();return true;}
});//如为自定义菜单项,可进行子控件设置
//例:
Menu menu=navigationView.getMenu();
View menuItemView=menu.findItem(R.id.item1).getActionView();
ImageView imageView=menuItemView.findViewById(R.id.~);
imageView.setImageResource(R.drawable.~);

2. 显示自定义菜单项的菜单:

NavigationView支持显示自定义菜单项布局的菜单,用于替代只能显示黑色icon阴影图标与title的菜单。

在菜单项中添加app:actionLayout属性即可自定义菜单项布局。在设置本属性时请不要设置title,可能会导致冲突,可用tools:ignore="MenuTitle"替代title。

请注意是app:actionLayout不是android:actionLayout

(1) 创建自定义菜单项的xml布局文件
//  res\layout\menu_item_layout.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><!--  自定义菜单项 !--></RelativeLayout>
(2) 设置菜单项布局为自定义菜单项
//  res\menu\navigation_view_menu.xml<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"tools:showIn="navigation_view"><itemandroid:id="@+id/item1"app:actionLayout="@layout/menu_item_layout"tools:ignore="MenuTitle" /><itemandroid:id="@+id/item2"app:actionLayout="@layout/menu_item_layout"tools:ignore="MenuTitle"/>
</menu>
(3)设置自定义菜单项中的子控件

使用自定义菜单项时可使用menu.findItem()获取指定菜单项,然后使用getActionView()获取菜单项的View,最后使用view.findViewById()获取指定控件。

//  MainActivity.java
//如为自定义菜单项,可进行子控件设置
//例:
Menu menu=navigationView.getMenu();
View menuItemView=menu.findItem(R.id.item1).getActionView();
ImageView imageView=menuItemView.findViewById(R.id.~);
imageView.setImageResource(R.drawable.~);

这篇关于NavigationView导航视图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图

数据视图(AngularJS)

<!DOCTYPE html><html ng-app="home.controller"><head><meta charset="utf-8"><title>数据视图</title><link href="page/common/css/bootstrap.min.css" rel="stylesheet"><script src="page/common/js/angular.js"></

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

架构全景视图

文章目录 一、战略规划二、业务架构Business Architecture2.1业务架构定义2.2 业务架构组成2.3 TOGAF2.3.1 Archimate建模(重要) 三、数据架构Data Architecture3.1 数据架构定义3.2 数据架构组成 四、应用架构Application Architecture4.1 应用架构定义4.2 应用架构组成 五、技术架构Technol

2409wtl,切换视图

原文 介绍 我从一个基于SDI(单文档接口)WTL向导的应用开始,添加了一些从控件继承的窗口和一些对话框窗口(表单视图),然后才发现我必须,使SDI框架动态加载和卸载子窗口. 本文演示了两个可用来完成的技术:在SDI应用中的视图间动态切换.这是我使用的两个. 技术 1技术:第一个方法涉及按需析构和重建视图实例.这更简单,且在不介意析构和重建窗口对象时效果很好. 2:按需创建视图,然后用

Django 第十七课 -- 视图 - FBV 与 CBV

目录 一. 前言 二. FBV 三. CBV 一. 前言 FBV(function base views) 基于函数的视图,就是在视图里使用函数处理请求。 CBV(class base views) 基于类的视图,就是在视图里使用类处理请求。 二. FBV 基于函数的视图其实我们前面章节一直在使用,就是使用了函数来处理用户的请求,查看以下实例: 路由配置: urlpat

android 动画 ——视图动画(View Animation)

android动画分为视图动画(View Animation)、属性动画(Property Animation) 想看属性动画(Property Animation):请移步至http://blog.csdn.net/u013424496/article/details/51700312 这里我们来说下视图动画(View Animation)的纯代码写法,还有一种是xml调用, 对于xml调

【mysql 视图】Mysql视图的创建

什么是视图? 视图是由查询结果形成的一张虚拟表。也就是我们可以理解为就是一种类似于表的数据对象。 什么时候要用到视图? 如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询。 视图与表的关系? 视图是表的查询结果,自然表的数据变了,会影响视图的结果。 创建视图 CREATE VIEW v_person as SELECT * from persons; SEL

使用视图方式操作MySQL数据表

7.1  认识视图 7.1.1  视图的含义 视图是一种常用的数据库对象,可以把它看成从一个或几个源表导出的虚表或存储在数据库中的查询,对视图所引用的源表来说,视图的作用类似于筛选。 视图一经定义后,就可以像源表一样被查询、修改和删除。视图为查看和存取数据提供了另外一种途径,使用查询可以完成的大多数操作,使用视图一样可以完成。 使用视图还可以简化数据操作。当通过视图修改数据时,相应源表的数

QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(二)疑难杂症

疑难杂症1 1.问题: 设置场景的背景图片时,采用setBackgroundBrush()方法和重写drawBackground()函数得到的结果很不一样,而且通过setSceneRect设置场景原点位置之后得到的结果也有很大区别。 如下图 第一个和第三个中重写了QGraphicsScene的drawBackground()函数,区别在于第一个的场景原点在左上角,第三个的原点在中心。