新手必看:Android studio 侧边栏实现,带源码

文章目录

  • 前言
  • 效果图
  • 正文
    • toolbar 用于定义应用程序的导航栏
    • app_bar
    • drawer_layout 用于创建侧边栏导航
      • nav_header_draw
    • app:menu="@menu/activity_main_drawer"

前言

本篇内容主要是自己实现侧边栏后的一些总结,部分理论来着网络和ai助手,如有错误,欢迎大佬指点

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

正文

我刚开始没有找到很合适新手的实例,所有我尝试了Android studio自带侧边栏的布局
在这里插入图片描述
但是使用过后,我发现他有一些东西是我不想要的,我就把我不要的东西删掉,保留我想要的,我的侧边栏是全局侧边栏,就做了一个侧边栏activity来复用,多个fragment复用一个侧边栏activity,目前看到比较多的也就是这种形式实现全局侧边栏了,如果和我刚开始一样,对侧边栏没有任何基础的情况下可以试下我的方法或者看我这篇博客,这篇博客将会讲出我所知道的全局侧边栏的实现方法

我用的是NavigationView实现的,在用NavigationView实现时发现侧边栏主要包含这些部分的内容,接下来我们就一个个部分来讲
在这里插入图片描述

toolbar 用于定义应用程序的导航栏

这个xml主要作用是定义了一个侧边栏布局,其中包含一个Toolbar作为应用的主标题栏,以及一个AppBarLayout为这个栏提供了背景和行为
AppBarLayout 用于组合一个或多个应用程序栏,并且可以为这些栏提供背景和行为
Toolbar 可以作为应用的主标题栏,并包含一组菜单项和自定义操作

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="wrap_content"tools:context=".DrawerActivity"><com.google.android.material.appbar.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/Theme.MyMall.AppBarOverlay"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="50dp"android:background="?attr/colorPrimary"app:popupTheme="@style/Theme.MyMall.PopupOverlay" /></com.google.android.material.appbar.AppBarLayout>
</LinearLayout>

app_bar

这段代码定义了一个具有侧边栏的布局,侧边栏中包含一个工具条,而内容区域则是一个可以滚动的帧布局
<androidx.coordinatorlayout.widget.CoordinatorLayout>是Android的一个布局,它可以协调在其内部的其他各种布局和视图的行为,例如AppBarLayout和Scrolling UI组件
这个xml中引入了tool_bar.xm
<LinearLayout>中还有一个<FrameLayout>元素,它的滚动行为设置为@string/appbar_scrolling_view_behavior。这个滚动行为使得当这个视图(FrameLayout)滚动时,AppBarLayout会跟着滚动

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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=".DrawerActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><includelayout="@layout/tool_bar"android:layout_width="match_parent"android:layout_height="wrap_content" /><FrameLayoutandroid:id="@+id/flContent"app:layout_behavior="@string/appbar_scrolling_view_behavior"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

drawer_layout 用于创建侧边栏导航

这个xml是连接activity的,使用了<androidx.drawerlayout.widget.DrawerLayout>布局,用于创建侧边栏导航
android:fitsSystemWindows="true":这个属性指示该布局会填充系统窗口,通常用于创建全屏体验。
tools:openDrawer="start":这是在工具栏中打开侧边栏的指示。

xml中有NavigationView和一个include

  • NavigationView用于创建侧边栏的导航视图,其中包含:
    app:headerLayout="@layout/nav_header_draw"指定导航视图的头部布局
    app:menu="@menu/activity_main_drawer" 指定导航视图的菜单资源
    android:layout_gravity="start":属性指定了导航视图应从左侧开始。
  • include中引用了app_bar_draw
<?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:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"tools:openDrawer="start"><includeandroid:id="@+id/app_bar_draw"layout="@layout/app_bar_draw"android:layout_width="match_parent"android:layout_height="match_parent" /><com.google.android.material.navigation.NavigationViewandroid:id="@+id/nav_view"android:layout_width="200dp"android:layout_height="match_parent"android:layout_gravity="start"android:fitsSystemWindows="true"app:headerLayout="@layout/nav_header_draw"app:menu="@menu/activity_main_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>

nav_header_draw

这个xml就是侧边栏的这个位置
在这里插入图片描述
看自己是否需要,我用的默认的xml文件,可以根据自己的需求调整

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="@dimen/nav_header_height"android:background="@drawable/side_nav_bar"android:gravity="bottom"android:orientation="vertical"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingBottom="@dimen/activity_vertical_margin"android:theme="@style/ThemeOverlay.AppCompat.Dark"><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/nav_header_desc"android:paddingTop="@dimen/nav_header_vertical_spacing"app:srcCompat="@mipmap/ic_launcher_round" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="@dimen/nav_header_vertical_spacing"android:text="@string/nav_header_title"android:textAppearance="@style/TextAppearance.AppCompat.Body1" /><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/nav_header_subtitle" />
</LinearLayout>

app:menu=“@menu/activity_main_drawer”

关于drawer_layout的菜单资源,我写了一个可以折叠展开二级菜单的item

<menuxmlns:android="http://schemas.android.com/apk/res/android"><group android:checkableBehavior="single"><itemandroid:id="@+id/FirstAge"android:title="首页"android:visible="true"android:icon="@drawable/baseline_arrow_drop_down_24" /><itemandroid:id="@+id/Dashboard"android:checked="false"android:title="仪表盘"android:visible="false"/><itemandroid:id="@+id/StudyTutorial"android:checked="false"android:title="学习教程"android:visible="false" /><itemandroid:id="@+id/VideoTutorials"android:checked="false"android:title="视频教程"android:visible="false" /></group><group android:checkableBehavior="single"><itemandroid:id="@+id/Commodity"android:title="商品"android:visible="true"android:icon="@drawable/baseline_arrow_drop_down_24"/><itemandroid:id="@+id/ProductList"android:checked="false"android:title="商品列表"android:visible="false"/><itemandroid:id="@+id/AddProduct"android:checked="false"android:title="添加商品"android:visible="false"/><itemandroid:id="@+id/Category"android:checked="false"android:title="商品分类"android:visible="false"/><itemandroid:id="@+id/ProductType"android:checked="false"android:title="商品类型"android:visible="false"/><itemandroid:id="@+id/Branding"android:checked="false"android:title="品牌管理"android:visible="false"/></group><group android:checkableBehavior="single"><itemandroid:id="@+id/OrderForGoods"android:title="订单"android:visible="true"android:icon="@drawable/baseline_arrow_drop_down_24"/><itemandroid:id="@+id/Orderlist"android:checked="false"android:title="订单列表"android:visible="false"/><itemandroid:id="@+id/OrderSettings"android:checked="false"android:title="订单设置"android:visible="false"/><itemandroid:id="@+id/ReturnApplicationProcessing"android:checked="false"android:title="退货申请处理"android:visible="false"/><itemandroid:id="@+id/ReturnReasonSettings"android:checked="false"android:title="退货原因设置"android:visible="false"/></group><group android:checkableBehavior="single"><itemandroid:id="@+id/Marketing"android:title="营销"android:visible="true"android:icon="@drawable/baseline_arrow_drop_down_24"/><itemandroid:id="@+id/ListOfFlashKillingActivities"android:checked="false"android:title="秒杀活动列表"android:visible="false"/><itemandroid:id="@+id/CouponList"android:checked="false"android:title="优惠券列表"android:visible="false"/><itemandroid:id="@+id/BrandRecommendation"android:checked="false"android:title="品牌推荐"android:visible="false"/><itemandroid:id="@+id/NewProductRecommendation"android:checked="false"android:title="新品推荐"android:visible="false"/><itemandroid:id="@+id/PopularRecommendation"android:checked="false"android:title="人气推荐"android:visible="false"/><itemandroid:id="@+id/SpecialRecommendation"android:checked="false"android:title="专题推荐"android:visible="false"/><itemandroid:id="@+id/AdvertisingList"android:checked="false"android:title="广告列表"android:visible="false"/></group><group android:checkableBehavior="single"><itemandroid:id="@+id/LimitsOfAuthority"android:title="权限"android:visible="true"android:icon="@drawable/baseline_arrow_drop_down_24"/><itemandroid:id="@+id/UserList"android:checked="false"android:title="用户列表"android:visible="false"/><itemandroid:id="@+id/RoleList"android:checked="false"android:title="角色列表"android:visible="false"/><itemandroid:id="@+id/MenuList"android:checked="false"android:title="菜单列表"android:visible="false"/><itemandroid:id="@+id/ResourceList"android:checked="false"android:title="资源列表"android:visible="false"/></group>
</menu>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一台电脑远程内网的另外一台电脑,禁止远程的电脑连接外网,只允许内网连接

一台电脑远程内网的另外一台电脑&#xff0c;禁止远程的电脑连接外网&#xff0c;只允许内网连接 1.找到右下角网卡图标&#xff0c;右键图标选择“打开网络和共享中心”。 3、点击“更改适配器设置”。 4、右键正在使用的网卡“本地连接”打开属性 5、找到“internet协…

DAZ To UMA⭐三.导入Blender的配置, 及Blender快捷键

文章目录 🟥 Blender快捷键1️⃣ 3D视图快捷键2️⃣ 视角快捷键3️⃣ 编辑快捷键4️⃣ 对物体的操作🟧 Blender导入FBX的配置🟩 设置脸部骨骼大小1️⃣ 切换视角2️⃣ 缩小脸部骨骼3️⃣ 本节效果预览🟦 设置眼角膜透明度🟥 Blender快捷键 1️⃣ 3D视图快捷键 快捷键…

UML基础与应用之面向对象

UML&#xff08;Unified Modeling Language&#xff09;是一种用于软件系统建模的标准化语言&#xff0c;它使用图形符号和文本来描述软件系统的结构、行为和交互。在面向对象编程中&#xff0c;UML被广泛应用于软件系统的设计和分析阶段。本文将总结UML基础与应用之面向对象的…

UG NX二次开发(C#)-计算直线到各个坐标系轴向的投影角度

文章目录 1、前言2、需求分析3、NXOpen方法实现3.1 创建基准坐标系3.2 然后计算直线到基准坐标系的轴向角度3.3 代码调用4、测试效果为:1、前言 最近有个粉丝问我如何计算直线到坐标系各个轴向的角度,这里用UG NX二次开发(C#)实现。当然,这里的内容是经验之谈,如果有更好的…

2、AWT介绍

2、AWT介绍 AWT是Swing的前身&#xff0c;我们使用AWT学习底层的实现而用Swing来画一些界面 2.1 AWT 介绍 AWT&#xff1a;抽象的窗口工具&#xff08;Abstract Windows Tools&#xff09;&#xff0c;包含了很多的类和接口&#xff01;用于GUI编程&#xff0c;GUI&#xff…

秦时明月沧海手游阵容推荐,秦时明月沧海角色强度

秦时明月沧海角色强度如何&#xff1f;在秦时明月沧海手游中&#xff0c;您可以从大量的角色卡牌中选择并发展&#xff0c;为了顺利通过各种副本&#xff0c;玩家们需要精心搭配阵容。那么&#xff0c;具体该如何配置最强的角色呢&#xff1f; 下面&#xff0c;小编将带各位玩家…

GeoServer运行报错503,……Unmapped relationship: 7

Windows11运行GeoServer-2.19.0报错[org.geoserver.system.status.OSHISystemInfoCollector]……Unmapped relationship: 7 问题说明解决方法 问题说明 最近换了新电脑&#xff0c;在电脑上安装了一个geoserver2.19.0版本&#xff0c;但是运行就是报错&#xff0c;虽然最后提示…

SVN_SERVER的搭建

一、目前svnserver仅支持windows下安装&#xff0c;所以前提需要一台windows服务器或者windows主机 1. 下载最新版本的包 当前最新版visualsvn server最新版5.3.0 visualsvn server下载地址Downloads | VisualSVN 当前tortoiseSVn最新版1.14.5 tortoise SVN下载地址 h…

高等数学应试考点速览(下)

函数项级数 【收敛域】上&#xff0c;收敛于&#xff1a;【和函数】&#xff1b; 幂级数&#xff1a;绝对收敛区间 ( − R , R ) (-R,R) (−R,R)&#xff0c;&#xff08;端点是否属于收敛域&#xff0c;需要再探讨&#xff09; R lim ⁡ n → ∞ ∣ a n a n 1 ∣ R\lim_{n…

Spring整合RabbitMQ——消费者

1.配置consumer xml配置文件 2. 实现MessageListener接口 并重写onMessage方法

数组01-二分查找算法

目录 数组如何实现随机访问 两个关键词 数组的特点 根据下标随机访问数组元素 为什么数组要从0开始编号&#xff0c;而不是从1开始 LeetCode之路——704. 二分查找 Code 二分查找算法 数组如何实现随机访问 数组&#xff08;Array&#xff09;是一种线性表数据结构。它…

Docker部署ActiveMQ消息中间件

1、准备工作 docker pull webcenter/activemq:5.14.3 Pwd"/data/software/activemq" mkdir ${Pwd}/data -p2、运行容器 docker run -d --name activemq \-p 61616:61616 \-p 8161:8161 \-v ${Pwd}/data:/opt/activemq/data \-v /etc/localtime:/etc/localtime \--r…

活动预告|蚂蚁集团 2023 KubeCon Shanghai 议题揭秘

9 月 26日-28 日&#xff0c;由 Linux 基金会、CNCF 主办的 KubeCon CloudNativeCon Open Source Summit China 2023 将在上海跨国采购会展中心隆重召开。本次峰会将聚集全球社区&#xff0c;共同探讨云原生和开源领域的前沿洞察、核心技术与最佳实践&#xff0c;会议主题囊括…

深拷贝与浅拷贝

首先深拷贝与浅拷贝 只针对Object 和Array这样的引用数据类型 所以基本数据类型不用考虑了 等号赋值 基本数据类型 对于基本数据类型&#xff0c;就会创建一个新的变量&#xff0c;并将原变量的值复制给新变量。 这是基于变量是存储在栈内存中的特点。简单来说&#xff0c;等…

Linux学习第20天:Linux按键输入驱动开发: 大道至简 量入为出

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 中国文化博大精深&#xff0c;太极八卦&#xff0c;阴阳交合&#xff0c;变化无穷。在程序的开发中也是这样&#xff0c;数字0和1也是同样的道理。就本节来说&am…

pytho实例--pandas读取表格内容

前言&#xff1a;由于运维反馈帮忙计算云主机的费用&#xff0c;特编写此脚本进行运算 如图&#xff0c;有如下excel数据 计算过程中需用到数据库中的数据&#xff0c;故封装了一个读取数据库的类 import MySQLdb from sshtunnel import SSHTunnelForwarderclass SSHMySQL(ob…

【QT】Qt的随身笔记(持续更新...)

目录 Qt 获取当前电脑桌面的路径Qt 获取当前程序运行路径Qt 创建新的文本文件txt&#xff0c;并写入内容如何向QPlainTextEdit 写入内容QTimerQMessageBox的使用QLatin1StringQLayoutC在c头文件中写#include类的头文件与直接写class加类名有何区别mutable关键字前向声明 QFontQ…

面试打底稿④ 专业技能的第四部分

简历原文 抽查部分 了解Python的使用&#xff08;第一篇关于Python升级版本bug解决的文章斩获6W阅读&#xff09;&#xff0c;用python实现了几篇图像信息隐藏领 域论文的复现&#xff08;博客中有提及&#xff09;&#xff1b; 了解Django基本框架&#xff0c;写过Django框架的…

手把手教你实现:将后端SpringBoot项目部署到华为云服务器上

前言 前提&#xff1a;有一个后端项目&#xff0c;项目能够运行在本地&#xff0c;可以通过本地访问&#xff08;localhost&#xff09; 如果没有可以看这篇&#xff1a;一个基于SpringBoot的后端项目 注册华为云账号 华为云官网 购买云服务器 产品 -> 华为云耀云服务器…

Python+requests+unittest+excel实现接口自动化测试框架

一、框架结构&#xff1a; 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求&#xff08;runmethon.py&#xff09; 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…