新手必看: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.xdnf.cn/news/142721.html

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

相关文章

根据文章段落内容自动插入图片php版

每篇内容根据段落判断插入图片代码附上&#xff1a; $chatd"<table>";if(stripos($content,$chatd)0){//随机输出三张图功能if($moduleid!37 &&$thumb){//判断是否存在图$idrand(1,999999);$midrand(1,9999999);$getimg"http://www.nongpin88.co…

uniapp项目实践总结(二十三)网页和小程序应用打包教程

导语&#xff1a;当你的应用程序开发完成后&#xff0c;在发布到互联网之前&#xff0c;需要进行打包操作&#xff0c;包括网页端、小程序端的打包。 目录 准备工作网页打包小程序打包 准备工作 在打包之前&#xff0c;请保证你的 uniapp 应用程序编译到网页、小程序是可以正…

2023国庆后前端面试应该准备什么?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 本篇文章会持续更新&#xff0c;也会同步到公众号前端面试官&#xff0c;方便大家随时随地学习…

聊聊并发编程——多线程之synchronized

目录 一.多线程下数据不一致问题 二.锁和synchronized 2.1 并发编程三大特性 2.2引入锁概念 三.synchronized的锁实现原理 3.1 monitorenter和monitorexit 3.2synchronized 锁的升级 3.2.1偏向锁的获取和撤销 3.2.2轻量级锁的加锁和解锁 自适应自旋锁 轻量级锁的解锁…

Apache DolphinScheduler 在奇富科技的首个调度异地部署实践

奇富科技&#xff08;原360数科&#xff09;是人工智能驱动的信贷科技服务平台&#xff0c;致力于凭借智能服务、AI研究及应用、安全科技&#xff0c;赋能金融机构提质增效&#xff0c;助推普惠金融高质量发展&#xff0c;让更多人享受到安全便捷的金融科技服务。作为国内领先的…

从裸机开始安装操作系统

目录 一、预置知识 电脑裸机 win10版本 官方镜像 V.S. 正版系统 二、下载微软官方原版系统镜像 三、使用微PE系统维护U盘 四、安装操作系统 五、总结 一、预置知识 电脑裸机 ●只有硬件部分&#xff0c;还未安装任何软件系统的电脑叫做裸机。 ●主板、硬盘、显卡等必…

start()方法源码分析

当我们创建好一个线程之后&#xff0c;可以调用.start()方法进行启动&#xff0c;start()方法的内部其实是调用本地的start0()方法&#xff0c; 其实Thread.java这个类中的方法在底层的Thread.c文件中都是一一对应的&#xff0c;在Thread.c中start0方法的底层调用了jvm.cpp文件…

static const char* 和const char*有报错,发生访问冲突

const char *srcfilere aByteArray.data(); 当重复某一操作时&#xff1a;有报错&#xff0c;发生访问冲突 const char *srcfilere aByteArray.data(); 即可解决访问冲突问题。 困扰了至少一天吧 应该是static的问题&#xff0c;吃了基础不好的亏。

AUTOSAR中的Crypto Stack(二)--CSM数据类型解析

在上一节,简单梳理了加密栈的基本要求。其中最关键最核心的还是用户如何使用HSM这个黑盒子,这就必须要对Crypto Service Manager要有很清晰的认识。 那么首先我们还是围绕概述里提到的job类型进行分析。 1. Crypto_JobType 上图, 在AUTOSAR的架构里,所有的密码操作…

【OLSR路由协议】链路状态路由(OLSR)协议中选择多点中继节点算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Grafana设置默认主页

点击【设置/管理】-> 【默认首选项 Preferences】-> 【主页仪表盘】 在下拉中选择一个页面作为主页即可

SPA项目之登录注册--请求问题(POSTGET)以及跨域问题

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于VueElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.ElementUI是什么 &#x1f4a1;…

SpringSecurity 入门

文章目录 Spring Security概念快速入门案例环境准备Spring配置文件SpringMVC配置文件log4j配置文件web.xmlTomcat插件 整合SpringSecurity 认证操作自定义登录页面关闭CSRF拦截数据库认证加密认证状态记住我授权注解使用标签使用 Spring Security概念 Spring Security是Spring…

docker 安装 nessus新版、awvs15-简单更快捷

一、docker 安装 nessus 参考项目地址&#xff1a; https://github.com/elliot-bia/nessus 介绍&#xff1a;几行代码即可一键安装更新 nessus -推荐 安装好 docker后执行以下命令 #拉取镜像创建容器 docker run -itd --nameramisec_nessus -p 8834:8834 ramisec/nessus …

C#中的(++)和(--)运算符

目录 背景: 的前加 效果展示:​ 的后加 效果展示 :​ 总结: 背景: 自增和自减运算符存在于C/C/C#/Java等高级语言中&#xff0c;它的作用是在运算结束前(前置自增自减运算符 )或后(后置自增自减运算符 )将 变量的值加(或减)1。 在C#中&#xff0c;和--是自增和自减运…

【趣味JavaScript】5年前端开发都没有搞懂toString和valueOf这两个方法!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

UE5 虚幻引擎 如何使用构造脚本(Construction Script)? 构造脚本的奥秘!

目录 1 构造脚本&#xff08;Construction Script&#xff09;1.1 介绍1.2 案例1&#xff1a;利用样条组件程序化生成树木1.2 案例2&#xff1a;利用样条组件和样条网格体组件程序化生成道路 1 构造脚本&#xff08;Construction Script&#xff09; 1.1 介绍 问题&#xff1a…

【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(2,常见的二维随机变量及二维变量的条件分布和独立性)

文章目录 引言四、常见的二维随机变量4.1 二维均匀分布4.2 二维正态分布 五、二维随机变量的条件分布5.1 二维离散型随机变量的条件分布律5.2 二维连续型随机变量的条件分布 六、随机变量的独立性6.1 基本概念6.2 随机变量独立的等价条件 写在最后 引言 有了上文关于二维随机变…

【Vue.js】使用ElementUI搭建动态树数据表格与分页

一&#xff0c;动态树 本文章为上一篇文章拓展内容》》实现首页导航及左侧菜单 将左侧菜单结构更换为下面代码&#xff1a; 菜单结构&#xff1a; <el-menu><el-submenu index"" key""><template slot"title"><i class…

1526. 形成目标数组的子数组最少增加次数;2008. 出租车的最大盈利;1589. 所有排列中的最大和

1526. 形成目标数组的子数组最少增加次数 核心思想&#xff1a;差分数组。对于一个数组a,要想从全为0的数组增加1变为它&#xff0c;等价于从a减少1变为全0的数组。然后a有一个差分数组d&#xff0c;对于a区间的[L,R]减少1操作等价于对d[L]-1,然后d[R1]1。你想让a变为全0&…