Android---DrawerLayout + NavigationView

news2024/11/16 13:53:54

现在 Android Studio 已经直接提供左滑菜单功能,只需要在创建新项目时选择 Navigation Drawer Activity 就可以直接创建一个有左滑菜单功能的 APP。

目录

DrawerLayout      

android:src 与 app:srcCompat 

fitsSystemWindows

DrawerLayout      

        DrawerLayout 是 support-v4 Library 包中实现了侧滑菜单效果的控件,可以说 drawerLayout 是因为第三方控件如 MenuDrawer 等的出现之后,Google 借鉴而出现的产物。DrawerLayout 分为侧边菜单和主内容区两个部分,侧边菜单可以根据手势展开与隐藏(drawerLayout 自身特性),主内容区可以随着菜单的点击而变化。

    1. 抽屉式导航栏是显示应用主导航菜单的界面面板。当用户触摸应用栏中的抽屉式导航栏图标或从屏幕的左边缘滑动手指时,就会显示抽屉式导航栏;

    2. 抽屉式导航栏图标会显示在使用 DrawerLayout 的所有顶级目的地上。顶级目的地是应用的根级目的地。它们不会在应用栏中显示向上按钮。

    3. 要添加抽屉式导航栏,请先声明 DrawerLayout 为根视图。在 DrawerLayout 内,为主界面内容以及包含抽屉式导航栏内容的其他视图添加布局。

    4. 例如,以下布局使用含有两个子视图的 DrawerLayout: 包含主要内容的 NavHostFragment 和适用于抽屉式导航栏内容的 NavigationView。

<?xml version="1.0" encoding="utf-8"?>
<!-- Use DrawerLayout as root container for activity -->
<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"
    android:fitsSystemWindows="true">
    
    <fragment
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:id="@+id/nav_host_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/mobile_navigation" />
   
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true" />
</android.support.v4.widget.DrawerLayout>

      \bullet android:name 指定 NavHost 的实现类,这里是 NavHostFragment;

      \bullet app:defaaultNavHost="true" 拦截系统返回键,当用户按下返回键时,系统会将正在展示的 Fragment 返回。

       \bullet app:navGraph 关联导航图;mobile_navigation.xml 是放在 res --> navigation 文件加里,是一个包含导航目的地(fragment)的菜单;

        mobile_navigation.xml 具体内容

<?xml version="1.0" encoding="utf-8"?>
<navigation 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/mobile_navigation"
    app:startDestination="@+id/nav_home">

    <fragment
        android:id="@+id/nav_home"
        android:name="com.example.leftnavigationbar.ui.home.HomeFragment"
        android:label="@string/menu_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/nav_gallery"
        android:name="com.example.leftnavigationbar.ui.gallery.GalleryFragment"
        android:label="@string/menu_gallery"
        tools:layout="@layout/fragment_gallery" />

    <fragment
        android:id="@+id/nav_slideshow"
        android:name="com.example.leftnavigationbar.ui.slideshow.SlideshowFragment"
        android:label="@string/menu_slideshow"
        tools:layout="@layout/fragment_slideshow" />
</navigation>

      \bullet android:id 必填项,后面 fragment跳转的时候要用到;

      \bullet android:name Fragment 的全路径;

      \bullet android:label 要跳转的 Fragment 在菜单里的名字

      \bullet tools:layout Fragment 的布局;

    

NavigationView 

        NavigationView 表示应用程序的标准导航菜单,菜单内容可以由菜单资源文件填充。NavigationView 通常放在 DrawerLayout 中,可以实现侧滑效果的 UI 。DrawerLayout 布局可以有3个子布局,第一个布局必须是主界面而且不可以不写,其他2个布局就是左、右两个侧滑布局,左右两个侧滑布局可以只写其中一个。

    \bullet android:laoyout_gravity 值为 start 则是从左侧滑出,值为 end 则是从右侧滑出;

android:layout_gravity="start"
android:layout_gravity="end"

   \bullet app:headerLayout 给 NavigationView 设置头文件;

app:headerLayout="@layout/nav_header_main"

        nav_header_man.xml 是包含头部布局样式的布局文件。 

         

   \bullet app:menu NavigationView 是通过菜单形式在布局中放置元素的,值为自己创建的菜单文件;

app:menu="@menu/activity_main_drawer"

        在 src 下新建一个 menu 文件夹,activity_main_drawer.xml 是放在 menu 下的菜单布局文      件 。里面是 Home / Gallery / Slideshow 等 item。可以设置每个 item 的 title、icon等。

         

   \bullet app:itemIconTint 设置菜单图标的颜色;

   \bullet app:itemTextColor 设置菜单文字的颜色;

   \bullet app:itemBackground 设置菜单背景的颜色;  

android:src 与 app:srcCompat 

二者几乎没有区别,都是加载图片资源。

app:srcCompat 将矢量可绘制对象集成到应用程序中。矢量可绘制对象允许您用XML中定义的单个矢量图形替换多个png资产。从Android支持库23.3.0开始,支持向量可绘制对象只能通过加载app:srcCompat。

app:srcCompat 设置一个可绘制对象作为此ImageView的内容,它将以其原始大小显示。

fitsSystemWindows

        android:fitsSystemWindows="true" 实现沉浸式状态栏效果

        android 手机顶部用于显示各种通知和状态信息的这个栏叫做状态栏。通常情况下,我们应用程序的内容都是显示在状态栏下方的,但是为了更好的视觉效果,我们希望将应用程序顶部的背景颜色延申到状态栏的背后,这种效果就称之为沉浸式状态栏。

        把 android:fitsSystemWindows 属性设置为 true 为打开沉浸式状态栏效果,false 为关闭沉浸式状态栏效果。同时需要在逻辑代码里把状态栏的背景改成透明色,才能看到效果。加上如下代码:

getWindow().setStatusBarColor(Color.TRANSPARENT);

注意:android:fitsSystemWindows="true" 顶级布局必须是 CoordinatorLayout,否则也看不到效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据报告重要的是业务看得懂

一、前言上篇文章我们从指标库的角度梳理了指标是如何计算出来的&#xff0c;确保业务人员有数可寻&#xff0c;但对于业务人员而言&#xff0c;并不是所有的指标都看得懂&#xff0c;也不是所有的指标都需要理解&#xff0c;笔者见过太多不知所云的数据报告&#xff0c;各种模…

Maven高级-分模块拆分

Maven高级 分模块开发与设计 聚合 继承 属性 版本管理 资源配置 多环境开发配置 跳过测试 私服 分模块开发与设计 拷贝原始项目中对应的相关内容到ssm_pojo模块中 ​ 实体类&#xff08;User&#xff09; ​ 配置文件&#xff08;无&#xff09; User.java package com.i…

S32K144-S32DS 导入/编译/烧录 遇到的问题

找到你开发套件软件安装包的路径&#xff0c;里面有四个例子&#xff0c;任选一个&#xff1b;不要忘记复制到工作区 问题一&#xff1a;修改电机库的路径 问题二&#xff1a;freemaster路径问题 编译还是报错&#xff0c;好像还必须安装FreeMaster 安装之后&#xff0c;还是这…

电子招标采购系统源码:构建高效智能数字化采购

过去几十年&#xff0c;公用事业行业发生了重大变化。能源需求的转变导致企业利润率的波动&#xff0c;但不是运营成本的波动。 许多公用事业公司通过后勤部门流程自动化来削减成本&#xff0c;比如招采流程自动化。 在招采活动中&#xff0c;人工招采会产生盲点。由于公共事业…

【MySQL】MySQL视图原理与实战(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/Liunx内核/C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1f4…

ArcGIS基础实验操作100例--实验51CAD转要素类

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验51 CAD转要素类 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&#…

多线程之线程安全问题

1.线程安全示例 class Count{int a 0;public void add(){a;} } public class ThreadDemo8 {public static void main(String[] args) {Count count new Count();Thread t1 new Thread(()->{for (int i 0; i < 5_0000; i) {count.add();}});Thread t2 new Thread(()…

这款企业报表工具给你灵活的数据查询体验

随着对BI应用程度的加深&#xff0c;用户需要连接和管理的数据越来越多&#xff0c;也越来越复杂。电子表格软件支持丰富的数据源接入&#xff0c;但一般并不能直接使用接入的业务库直接进行数据分析。所以在报表开发前的取数过程&#xff0c;把需要的数据整合成一个数据集合&a…

Ajax技术

全局刷新和局部刷新 在B/S 结构的项目中&#xff0c; 浏览器端负责把用户的请求和参数通过网络发送给服务器,服务端负责接收请求&#xff0c;并将处理的结果返回给浏览器。浏览器端负责展示响应结果给用户。 全局刷新 整个浏览器被新的数据覆盖。在网络中传输大量的数据。浏…

经历了资本的狂热追捧之后,元宇宙开始进入到相对冷静的发展阶段里

经历了资本的狂热追捧之后&#xff0c;元宇宙开始进入到相对冷静的发展阶段里。在这样一个阶段&#xff0c;元宇宙不再被看成是一个万能的存在&#xff0c;不再被看成是一个无所不包的存在&#xff0c;而是变成了一个相对较为客观和理性的存在。看看Meta的表现&#xff0c;看看…

C#语言实例源码系列-游戏-实现俄罗斯方块

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

css新特性:线性渐变详解(重复性线性渐变、径向渐变、重复性径向渐变的使用)

线性渐变线性渐变重复性线性渐变径向渐变重复性径向渐变的使用线性渐变 线性渐变是向下、向上、向左、向右、对角方向的颜色渐变。 其语法格式为&#xff1a; background-image: linear-gradient(side-or-corner|angle, linear-color-stop);参数说明如下&#xff1a; side-o…

C++——二叉树OJ

目录 1.根据二叉树创建字符串 2.二叉树的层序遍历 3.二叉树的层序遍历2 4.二叉树的最近公共祖先 5. 搜索二叉树与双向链表 6.从前序与中序遍历构建二叉树 1.根据二叉树创建字符串 按照前序遍历&#xff1a;根左右。 1(2(4()())())(3()()) 1.左右都为空&#xff0c;则可…

通过PWM控制串行LED灯

资料下载 RGB_LED灯带_5050慢闪_datasheet STM32控制LED灯带 根据上面的说明书可知&#xff0c;通过修改800KHz的PWM波形的占空比可以控制LED的颜色。 假设现在有3颗串联起来的灯珠&#xff0c;如下图&#xff1a; 如果U1/U2/U3需要显示红/绿/蓝色&#xff0c;根据说明书&…

Vue3 的项目搭建

使用工具&#xff1a; VSCode Volar &#xff1a;编辑器和插件Vite&#xff1a;打包工具Vue3&#xff1a;VueX&#xff1a;存储NodeJs&#xff1a;环境 操作步骤&#xff1a; 安装Node.js安装VsCode安装 Volar创建一个Vite的初始化项目 npm init viteProject name 这一行 我…

Linux系统下刨析hello world背后的秘密

Hi&#xff0c;小伙伴们&#xff0c;大家好&#xff01;今天给大家讲解Linux系统编程中几个重要的概念。必须理解了这几个重要概念&#xff0c;才能更快的入门Linux系统编程&#xff0c;这是不可或缺的基础知识。看似简单&#xff0c;如果不花一番功夫很难真正的理解它们。需要…

113.(leaflet之家)leaflet根据距离截取线段

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>

AAC ADTS格式分析与提取aac音频文件实战

1.AAC⾳频格式简介 AAC⾳频格式&#xff1a;Advanced Audio Coding(⾼级⾳频解码)&#xff0c;是⼀种由MPEG-4 标准定义的有损⾳频压缩格式&#xff0c;由Fraunhofer发展&#xff0c;Dolby, Sony和AT&T是主 要的贡献者。 AAC 包含两种格式&#xff1a;ADIF和ADTS 2.ADIF…

Python基础(二十):面向对象基础

文章目录 面向对象基础 一、理解面向对象 二、类和对象 1、理解类和对象

已知Retangle2的中心点坐标,角度,半长,半宽,计算四个顶点坐标和四个线段中点坐标

Halcon可以通过最小外接矩型算子获取Retangle2的中心点坐标&#xff0c;角度&#xff0c;半长&#xff0c;半宽。但是却没有四个顶点坐标和四个线段中点坐标。下面的代码是获取四个顶点坐标和四个线段中点坐标的方法。 gen_rectangle2 (Rectangle, 300, 200, 0.39, 100, 50) C…