Android Studio开发之路(十四)自定义Titlebar以及设置顶部状态栏颜色

一、描述

项目需求,我要做一个下图这样的titlebar,包括一个返回按钮,一个关闭按钮,一个文本框。默认的titlebar按钮设计不太满足我的需求,于是我打算自定义一个titlebar组件,应用到我的每一个页面

这里是引用

二、titlebar组件设计

在res/layout下创建一个mytitlebar.xml
设计:

  1. 由于两个按钮要靠左,而文本框要居中,于是我定义了两个linearLayout布局,一个设置靠左android:gravity=“left”,用于放两个按钮;另一个设置居中android:gravity=“center”,用于放文本框。 然后将这两个布局放到FrameLayout布局,这样它们就会上下叠在一起。
  2. 考虑到这个组件要放在页面上方,但是页面上方通常还有个显示时间电量等信息的状态栏,那么就可能出现mytitlebar被状态栏盖住,或者mytitlebar太靠下的情况。于是我添加了一个用于隔开状态栏的textview, 这样我可以在oncreate()函数中计算一下状态栏的高度,然后设置textview的高度=状态栏高度,这样将mytitlebar紧贴上边框就可以刚好把tilebar里边的信息显示出来。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:gravity="center"><!--用于隔开状态栏--><TextViewandroid:id="@+id/text_free"android:layout_width="match_parent"android:layout_height="wrap_content"android:backgroundTint="@color/white"/><!--真正的titlebar栏--><FrameLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="vertical"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:textColor="@color/black"android:textSize="16sp"android:id="@+id/titleText"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/transparent"android:orientation="horizontal"><ImageButtonandroid:layout_width="50dp"android:layout_height="40dp"android:id="@+id/backBtn"android:src="@drawable/back"android:background="@null"android:layout_marginLeft="10dp"android:onClick="ongoback"/><ImageButtonandroid:layout_width="20dp"android:layout_height="20dp"android:layout_gravity="center"android:id="@+id/closeBtn"android:src="@drawable/close2"android:background="@android:color/transparent"android:layout_marginLeft="10dp"android:onClick="oncloseClicked"/></LinearLayout></FrameLayout></LinearLayout>

三、使用方法

  1. 首先,在要添加titlebar的activity的布局文件中添加以下语句,表示该布局中包含了titlebar, 一般放到布局开头就可以
 <includeandroid:id="@+id/include"layout="@layout/mytitlebar"></include>

这里是引用

  1. 然后,在activity的java类文件中的oncreate()函数内设置:
protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tips);getWindow().setStatusBarColor(getResources().getColor(R.color.white));//设置状态栏颜色getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//实现状态栏图标和文字颜色为暗色//获取状态栏的高度int statusBarHeight = 0;int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");if (resourceId > 0) {statusBarHeight = getResources().getDimensionPixelSize(resourceId);}//设置文本框的高度为状态栏的高度,防止标题栏被状态栏覆盖TextView text_free=(TextView)findViewById(R.id.text_free);text_free.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,statusBarHeight));//titlebarTextView titleText=(TextView)findViewById(R.id.titleText);titleText.setText("拍照技巧");titleText.setGravity(Gravity.CENTER);}

就可以了。

四、设置顶部状态栏颜色

由于我直接在res/Themes中设置主题为白色后,状态栏的文字也变成了白色,于是我手动设置状态栏的背景和文字颜色,设置方法参见上边一段代码。添加注释了。

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

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

相关文章

【NumPy】关于numpy.searchsorted()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

【Qt】数据库(一)SQLITE创建、增删查改

填坑1&#xff1a;如何连续插入 汇总SQlite语句 创建表格&#xff1a;create table <table_name> (f1 type1, f2 type2,…); 增&#xff1a;insert into <table_name> values (value1, value2,…); 改&#xff1a;update <table_name> set <f1value1>,…

数据结构第二篇【关于java线性表(顺序表)的基本操作】

【关于java线性表&#xff08;顺序表&#xff09;的基本操作】 线性表是什么&#xff1f;&#x1f435;&#x1f412;&#x1f98d;顺序表的定义&#x1f9a7;&#x1f436;&#x1f435;创建顺序表新增元素,默认在数组最后新增在 pos 位置新增元素判定是否包含某个元素查找某个…

使用高性能NIO框架netty实现IM集群对聊方案

文章目录 前言技术积累什么是nettynetty如何实现IM如何实现IM集群 实战演示基础配置netty搭建IM集群redis发布订阅 实战测试 前言 在前面的博文中我们分享了原生websoket集群搭建&#xff0c;也用redis 发布订阅实现了集群消息正常有序分发。但是有不少同学希望风向一期netty实…

Json差异比较

json差异比较 如何比较两个json的差异 代码实现 导入依赖 <dependency><groupId>cn.xiaoandcai</groupId><artifactId>json-diff</artifactId><!-- 旧版本可能存在某些缺陷。版本请以maven仓库最版为准。 --><version>4.1.3-RC1-R…

问题记录_stm32“No target connected“

问题描述&#xff1a; 基于HAL库和stm32cubeMX生成的代码&#xff0c;烧录时出现如下报错窗口&#xff1a; 问题原因&#xff1a; stm32cubeMX生成代码时关闭了SWJ调试功能 解决方法&#xff1a; 在项目中找到__HAL_AFIO_REMAP_SWJ_DISABLE();并注释掉 然后短按复位键的…

AI大模型是如何测试效果的?

AI大模型的测试和评估是一个复杂的过程&#xff0c;通常包括多个方面的考量&#xff0c;因此对大模型的测试也称为多度测试。 可以简单概括为以下几个方面&#xff1a; 基准测试&#xff08;Benchmarking&#xff09;&#xff1a;使用标准数据集和任务评估模型性能&#xff0c…

c语言从入门到函数速成(完结篇)

哈喽&#xff0c;小伙伴们大家好呀&#xff0c;本篇文章是这个系列的完结篇&#xff0c;希望大家看完后能有所收获哦 首先能看到这里的同学&#xff0c;一定也是自觉性比较强的了&#xff0c;我会在文章末尾给大家发点小福利 那么&#xff0c;我们先来通过数学中的函数来引入一…

基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验

K-means算法是一种常见的聚类算法&#xff0c;用于将数据点分成不同的组&#xff08;簇&#xff09;&#xff0c;使同一组内的数据点彼此相似&#xff0c;不同组之间的数据点相对较远。以下是K-means算法的基本工作原理和步骤&#xff1a; 工作原理&#xff1a; 初始化&#x…

Elasticsearch之入门与安装

Elaticsearch&#xff0c;简称为es&#xff0c; es是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来…

探索python循环逻辑的魅力:从无限到有限

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;循环逻辑的初步认识 二、无限循环&#xff1a;持续运转的引擎 三、有…

通过 PW6606 快充电压诱骗芯片,了解 USB-A 与 USB-C 快充协议

充电器一般分两种&#xff1a; 1&#xff0c; A 口充电器&#xff0c;就是我们常见的 USB 口&#xff0c;如下图&#xff0c;这种通用快充协议叫&#xff1a; QC3.0,QC2.0 快充&#xff0c;是属于快充刚开始的充电协议&#xff0c;支持 5V,9V,12V 和 20V 电压输出充电器&#x…

国内信创数据库生态

国内信创数据库生态 国内信创数据库主要包括但不限于以下几种&#xff1a; 数据库类型与厂商&#xff1a; 达梦 &#xff08;武汉达梦&#xff09; 官网 https://www.dameng.com/DM8.html 人大金仓 &#xff08;北京&#xff09; 官网 https://www.kingbase.com.cn/tyxsjk/i…

Open3D(C++) OTSU点云二值化

目录 一、算法原理二、代码实现三、结果展示1、原始点云2、二值化本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 最大类间方差法(Between-class scatter method)是一种用于分割的方法,它通过计算图…

Moto和Inter字节序

inter: 低地址按照start_bit位放低字节依次往高字节填充 MotoLsb: 低地址按照start_bit位放高字节&#xff0c;依次往低字节填充MotoMsb&#xff1a;高字节按照start_bit位放低地址&#xff0c;依次往高字节填充

【linux】服务器sshd服务导致CPU负载过高问题

一、背景 一台服务器突然访问ssh特别缓慢&#xff0c;top命令查看后&#xff0c;服务器Load Average占用很高。看相关异常进程都是sshd服务导致。 二、排查思路 查看服务器内存&#xff0c;磁盘io都是正常&#xff0c;在用连接数也不多。 一开始就怀疑是不是服务器被恶意攻…

grpc、多集群、多租户

gRPC和服务发现 一个A high-performance, open-source universal RPC framework&#xff0c;高性能、开源的通用 RPC 框架。使用protobuf 语言基于文件定义服务&#xff0c;通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub。移动端上面则是基于标准的 HTTP…

snmp学习小结

背景 很多厂商网络设备获取网络信息接口不一样&#xff0c;snmp用来统一接口 官网Net-SNMP 模型 每个主机可以安装自己的snmp agent&#xff0c;它可以监控目标机器的网络流量&#xff0c;当外部查询snmp信息时&#xff0c;请求会发到目标机器的snmp agent&#xff0c;由sn…

谷歌地图 | Google I/O ‘24 重磅发布助力企业拓展海外市场的新功能!

编者按&#xff1a;本文是 Google I/O 2024 系列的一部分&#xff0c;该系列分享了Google 年度开发者大会上最新的 Google Maps Platform 新闻。 距全球首个 Google Maps API 问世已近 20 年。它引领了网络和移动端地理空间体验的革命。从那时起&#xff0c;Google Maps Platf…

深入剖析—【服务器硬件】与【Nginx配置】:从基础到实战

服务器硬件部分&#xff1a; Processor (CPU)&#xff1a;服务器的计算核心&#xff0c;负责处理数据和执行程序。Memory (RAM)&#xff1a;用于暂时存储和快速访问数据&#xff0c;决定了系统的运行速度和并发处理能力。Storage (HDD/SSD)&#xff1a;长期存储数据的设备&…