Android标题栏(TitleBar)绝佳解决方案

标题栏框架

  • 项目地址:Github
  • 博客地址:Android标题栏(TitleBar)绝佳解决方案
  • 想了解实现原理的可以参考文章:纯手工打造一个通用的标题栏 TitleBar
集成步骤
  • 如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入
allprojects {repositories {// JitPack 远程仓库:https://jitpack.iomaven { url 'https://jitpack.io' }}
}
  • 如果你的 Gradle 配置是 7.0 及以上,则需要在 settings.gradle 文件中加入
dependencyResolutionManagement {repositories {// JitPack 远程仓库:https://jitpack.iomaven { url 'https://jitpack.io' }}
}
  • 配置完远程仓库后,在项目 app 模块下的 build.gradle 文件中加入远程依赖
android {// 支持 JDK 1.8compileOptions {targetCompatibility JavaVersion.VERSION_1_8sourceCompatibility JavaVersion.VERSION_1_8}
}dependencies {// 标题栏框架:https://github.com/getActivity/TitleBarimplementation 'com.github.getActivity:TitleBar:10.5'
}
布局属性大全
  • 不同版本的 xml 属性适配请点击这里查看
<declare-styleable name="TitleBar"><!-- 标题栏背景 --><attr name="android:background" /><!-- 标题栏样式 --><attr name="barStyle"><enum name="light" value="0x10" /><enum name="night" value="0x20" /><enum name="transparent" value="0x30" /><enum name="ripple" value="0x40" /></attr><!-- 子控件垂直内间距(可用于调整标题栏自适应的高度) --><attr name="childVerticalPadding" format="dimension" /><!-- 中间标题 --><attr name="title" format="string" /><attr name="titleColor" format="reference|color" /><attr name="titleSize" format="dimension" /><attr name="titleGravity"><flag name="left" value="0x03" /><flag name="right" value="0x05" /><flag name="center" value="0x11" /><flag name="start" value="0x00800003" /><flag name="end" value="0x00800005" /></attr><attr name="titleStyle"><flag name="normal" value="0" /><flag name="bold" value="1" /><flag name="italic" value="2" /></attr><attr name="titleIcon" format="reference" /><attr name="titleIconWidth" format="dimension" /><attr name="titleIconHeight" format="dimension" /><attr name="titleIconPadding" format="dimension" /><attr name="titleIconTint" format="color" /><attr name="titleIconGravity"><flag name="top" value="0x30" /><flag name="bottom" value="0x50" /><flag name="left" value="0x03" /><flag name="right" value="0x05" /><flag name="start" value="0x00800003" /><flag name="end" value="0x00800005" /></attr><attr name="titleHorizontalPadding" format="dimension" /><!-- 中间标题文本溢出处理模式(默认开启跑马灯) --><attr name="titleOverflowMode"><enum name="none" value="0" /><enum name="start" value="1" /><enum name="middle" value="2" /><enum name="end" value="3" /><enum name="marquee" value="4" /></attr><!-- 左标题 --><attr name="leftTitle" format="string"/><attr name="leftTitleColor" format="reference|color" /><attr name="leftTitleSize" format="dimension" /><attr name="leftTitleStyle"><flag name="normal" value="0" /><flag name="bold" value="1" /><flag name="italic" value="2" /></attr><attr name="leftIcon" format="reference" /><attr name="leftIconWidth" format="dimension" /><attr name="leftIconHeight" format="dimension" /><attr name="leftIconPadding" format="dimension" /><attr name="leftIconTint" format="color" /><attr name="leftIconGravity"><flag name="top" value="0x30" /><flag name="bottom" value="0x50" /><flag name="left" value="0x03" /><flag name="right" value="0x05" /><flag name="start" value="0x00800003" /><flag name="end" value="0x00800005" /></attr><attr name="leftBackground" format="reference|color" /><attr name="leftForeground" format="reference|color" /><attr name="leftHorizontalPadding" format="dimension" /><!-- 左边标题文本溢出处理模式 --><attr name="leftTitleOverflowMode"><enum name="none" value="0" /><enum name="start" value="1" /><enum name="middle" value="2" /><enum name="end" value="3" /><enum name="marquee" value="4" /></attr><!-- 右标题 --><attr name="rightTitle" format="string" /><attr name="rightTitleColor" format="reference|color" /><attr name="rightTitleSize" format="dimension" /><attr name="rightTitleStyle"><flag name="normal" value="0" /><flag name="bold" value="1" /><flag name="italic" value="2" /></attr><attr name="rightIcon" format="reference" /><attr name="rightIconWidth" format="dimension" /><attr name="rightIconHeight" format="dimension" /><attr name="rightIconPadding" format="dimension" /><attr name="rightIconTint" format="color" /><attr name="rightIconGravity"><flag name="top" value="0x30" /><flag name="bottom" value="0x50" /><flag name="left" value="0x03" /><flag name="right" value="0x05" /><flag name="start" value="0x00800003" /><flag name="end" value="0x00800005" /></attr><attr name="rightBackground" format="reference|color" /><attr name="rightForeground" format="reference|color" /><attr name="rightHorizontalPadding" format="dimension" /><!-- 右边标题文本溢出处理模式 --><attr name="rightTitleOverflowMode"><enum name="none" value="0" /><enum name="start" value="1" /><enum name="middle" value="2" /><enum name="end" value="3" /><enum name="marquee" value="4" /></attr><!-- 分割线 --><attr name="lineVisible" format="boolean" /><attr name="lineDrawable" format="reference|color" /><attr name="lineSize" format="dimension" /></declare-styleable>
XML示例
  • 点我查看完整的 Demo 示例
设置监听事件
titleBar.setOnTitleBarListener(new OnTitleBarListener() {@Overridepublic void onLeftClick(TitleBar titleBar) {toast("左项 View 被点击");}@Overridepublic void onTitleClick(TitleBar titleBar) {toast("中间 View 被点击");}@Overridepublic void onRightClick(TitleBar titleBar) {toast("右项 View 被点击");}
});
统一 TitleBar 样式
  • 如果对 TitleBar 的默认样式或者属性不满意,可以在 Application 初始化的地方进行拦截并修改
public class XxxApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 初始化 TitleBar 默认样式TitleBar.setDefaultStyle(new ITitleBarStyle());}
}
框架混淆规则
  • 在混淆规则文件 proguard-rules.pro 中加入
-keep class com.hjq.bar.** {*;}
框架亮点
  • 性能最佳:不使用 LayoutInflater,而使用代码创建 View 的形式
  • 体验最优:TitleBar 默认样式效果已经非常好,可下载 Demo 测试
  • 支持操控子控件:可以在代码中获取 TitleBar 的子控件进行调用相关的 API
  • 兼容沉浸式状态栏:兼容 Github 的沉浸式状态栏框架,达到完全沉浸的效果
  • 框架兼容性良好:本框架不依赖任何第三方库,支持兼容所有的安卓版本
  • 支持全局配置样式:可以在 Application 中初始化 TitleBar 样式,达到一劳永逸的效果

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

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

相关文章

vscode1.83远程连接失败

&#xff08;报错信息忘记截图了 总之卡在vscode-server.tar.gz的下载那里&#xff0c;一直404&#xff0c;删了C:\Users\Administrator\.ssh\known_hosts也不管用 看了一下vscode1.83的commitID为a6606b6ca720bca780c2d3c9d4cc3966ff2eca12&#xff0c;网友说可以通过以下网…

Miniconda 使用进阶,把它添加到右键菜单中

因为最近有写 python 的需求&#xff0c;且我是用 Miniconda 来管理本地 python 环境的&#xff0c;所以就涉及到需要频繁的进入到环境的命令行中&#xff0c;每次都需要通过官方提供的快捷方式&#xff0c;然后还要一路设置环境和路径&#xff0c;好烦呀。因为之前添加过 Wind…

材质之选:找到适合你的地毯

当谈到家居装饰时&#xff0c;地毯是一个经常被忽视的重要元素。但事实上&#xff0c;地毯在家居中扮演了至关重要的角色&#xff0c;不仅可以增加舒适感&#xff0c;还可以改善室内的整体氛围。在这篇文章中&#xff0c;我们将探讨地毯的选择、尺寸、形状和材质&#xff0c;以…

去除PDF密码:轻松解锁、快速解密。

解密和找回PDF密码非常简单。具体步骤如下&#xff1a;第一步&#xff0c;在百度上搜索【密码帝官网】。第二步&#xff0c;点击“立即开始”&#xff0c;在用户中心上传需要解密或找回密码的PDF文件。这个方法非常实惠&#xff0c;而且不需要下载任何软件&#xff0c;可以在手…

vue工程化开发和脚手架

工程化开发和脚手架 1.开发Vue的两种方式 核心包传统开发模式&#xff1a;基于html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xff08;例如&#xff1a;webpack&#xff09;的环境中开发Vue。 工程化开…

Linux(CentOS)安装MySQL教程

主要参考链接 教程 1. 准备工作 1.1 安装CentOS虚拟机 教程点击 1.2 将CentOS虚拟机设置为静态IP&#xff0c;否则你每次重启虚拟机后连接数据库都要重新查IP 教程点击 1.3 如果有安装过MySQL&#xff0c;请先卸载MySQL 教程点击 1.4 虚拟机执行命令su切换到root账号(输…

【python VS vba】(3) 在python直接调用vba脚本

目录 0 前言 1 VBA 内容 1.1 EXCEL这边VBA的内容 1.2 VBA的测试代码 2 python 调用 2.1 python 调用VBA的过程和结果 2.2 代码 0 前言 前面写了这么多&#xff0c;没想到&#xff0c;其实py是可以直接支持VBA的 python的模块import xlwings&#xff0c;可以让python直…

云上智能驾驶三维重建优秀实践

本文重点介绍火山引擎多媒体实验室三维重建技术在动态、静态场景的以及结合先进光场重建技术的原理与实践&#xff0c;帮助大家能更好的了解和认识云上智能三维重建如何服务智能驾驶领域&#xff0c;助力行业发展。 智能驾驶技术的不断发展&#xff0c;正在改变着我们的出行方式…

入门到精通,计算机推荐书籍

你是否曾读过一本让你欲罢不能的计算机书籍&#xff1f;它可能为你打开了新的技术世界大门&#xff0c;或者是帮助你解决了棘手的编程难题。 推荐一、计算机是怎样跑起来的-矢泽久雄 这是一本入门书籍&#xff0c;是编者大一大二期间偶然在图书馆看到的书籍。当时编者完全是一…

【设计模式】第16节:行为型模式之“命令模式”

一、简介 命令模式&#xff1a;将请求&#xff08;命令&#xff09;封装为一个对象&#xff0c;这样可以使用不同的请求参数化其他对象&#xff08;将不同请求依赖注入到其他对象&#xff09;&#xff0c;并且能够支持请求&#xff08;命令&#xff09;的排队执行、记录日志、…

操作系统 day05(体系结构、开机过程、虚拟机)

一&#xff0c;操作系统的体系结构 内核 内核是操作系统最基本、最核心的部分&#xff0c;实现操作系统内核功能的那些程序就是内核程序这其中&#xff1a;时钟、中断、原语是与硬件关联最紧密的模块&#xff0c;而进程管理、存储器管理、设备管理更多的是对数据结构的操作&…

Spring及SpringBoot中AOP的使用

Spring中AOP示例 <dependencies><!--Spring核心包--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.6</version></dependency><!--引入SpringBean--&…

GORM:在Go中轻松管理数据库

GORM综合介绍 - Go对象关系映射库 在现代软件开发中&#xff0c;高效的数据库管理对于构建强大的应用程序至关重要。GORM是Go开发人员寻求与数据库进行交互的简化方式的宝贵工具。GORM是Go对象关系映射的缩写&#xff0c;它为Go的面向对象世界与数据库的关系世界之间提供了桥梁…

运行项目报错error in ./node_modules/marked/lib/marked.umd.js

今天跑项目时发现一个报错&#xff0c;问题出在marked这个包&#xff0c;然后翻看package.json里面也没有这个包&#xff0c;全局搜索项目也没有这个包相关的信息&#xff0c;可它就是报错&#xff0c;索性直接把它给卸载发现还是报错 报错原因&#xff1a;包的版本太高 解决…

Ribbon负载均衡原理

一、先看下流程图 备注&#xff1a;红色后面都为拦截器的逻辑&#xff0c;主要是加载配置文件【LoadBalancerAutoConfiguration】&#xff0c;对发送http请求的RestTemplate进行包装拦截&#xff0c;逻辑拦在拦截器里面。 二、LoadBalancerAutoConfiguration 负载均衡用到配置…

数据结构 - ArrayList - 动态修改的数组

目录 实现一个通用的顺序表 总结 包装类 装箱 / 装包 和 拆箱 / 拆包 ArrayList 与 顺序表 ArrayList基础功能演示 add 和 addAll &#xff0c;添加元素功能 ArrayList的扩容机制 来看一下&#xff0c;下面的代码是否存在缺陷 模拟实现 ArrayList add 功能 add ind…

山东高新技术企业申报当年下证的知识产权能用吗?

一、申报当年下证的知识产权能用吗&#xff1f; 申报当年下证的知识产权不建议用&#xff0c;可以来年再申报。 二、我们目前有10件实用新型专利证书&#xff0c;但近三年只有5件缴纳年费了&#xff0c;还能用吗&#xff1f; 实用新型专利没有缴纳年费&#xff0c;是不能用的&a…

什么是 DevOps

DevOps是一套融合软件开发&#xff08;Dev&#xff09;和 IT 运营&#xff08;Ops&#xff09;的实践&#xff0c;旨在缩短应用程序开发周期并确保以高软件质量持续交付&#xff0c;通过采用 DevOps 实践&#xff0c;您可以帮助组织更可靠、更快速、更高效地交付软件。 什么是…

SLAM从入门到精通(计算点到直线的距离)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大家一开始看到这个题目的时候&#xff0c;也许比较吃惊。为什么会有这样的题目&#xff1f;但是做过slam的同学&#xff0c;应该就比较熟悉和了解…

Echats-自定义图表1

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh-cmn-Hans"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>…