【Android开发-28】Android中主题Theme和Toolbar的用法介绍

1,主题Theme
在Android中,主题(Theme)是一种用于定义应用程序用户界面外观的样式。主题可以包括颜色、字体、布局、控件样式等属性。通过使用主题,开发者可以轻松地为应用程序创建一致且具有吸引力的用户界面。

要使用主题,首先需要在AndroidManifest.xml文件中为应用程序指定一个主题:

<applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme">...
</application>

在上面的示例中,我们将应用程序的主题设置为AppTheme。接下来,我们需要在项目的res/values/styles.xml文件中定义这个主题:

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style>
</resources>

在上面的代码中,我们定义了一个名为AppTheme的主题,它继承自Theme.AppCompat.Light.DarkActionBar。这意味着我们的应用程序将使用浅色背景和深色操作栏。我们还可以通过添加自定义属性来进一步自定义主题,例如:

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="android:textColor">@color/textColor</item></style>
</resources>

在上面的代码中,我们添加了一个名为android:textColor的属性,它将应用于应用程序中的所有文本控件。要在布局文件中使用这个属性,只需将其作为控件的样式引用即可:

<TextViewstyle="@style/TextAppearance.AppCompat.Body1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!" />

在上面的代码中,我们将TextAppearance.AppCompat.Body1样式应用于TextView控件,这将应用我们在主题中定义的android:textColor属性。

2,ToolBar使用说明

在Android中,Toolbar是一个应用程序界面的导航控件,它提供了一种显示标题和操作按钮的方式,并且可以在不同的屏幕方向上自适应。Toolbar可以放置在布局的顶部或底部,并可以包含菜单项、子标题和搜索框等元素。

以下是如何在布局文件中添加Toolbar的示例:

<androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay" />

然后,你可以通过以下方式在Activity中使用Toolbar:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

你还可以设置Toolbar的背景颜色、标题和子标题以及它们的颜色:

toolbar.setBackgroundColor(Color.parseColor("#5C6BC0"));
getSupportActionBar().setTitle("标题"); // 设置标题
getSupportActionBar().setSubtitle("子标题"); // 设置子标题
getSupportActionBar().setTitleTextColor(Color.parseColor("#EC407A")); // 设置标题颜色
getSupportActionBar().setSubtitleTextColor(Color.parseColor("#FFFFFF")); // 设置子标题颜色

3,toolbar里带图标的menu参考
在Android中,要在Toolbar里添加带图标的Menu,可以参考以下代码:

首先,在布局文件(如activity_main.xml)中添加一个Toolbar和一个Menu:

<androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay"><MenuViewandroid:id="@+id/menu_view"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</androidx.appcompat.widget.Toolbar>

然后,在Activity(如MainActivity.java)中找到这两个组件,并为Menu设置菜单项:

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private Toolbar toolbar;private Menu menu;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取Toolbar和Menu组件toolbar = findViewById(R.id.toolbar);menu = toolbar.getMenu();// 为Menu设置菜单项MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu_main, menu);}// 重写onOptionsItemSelected方法,处理菜单项点击事件@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.menu_item1:Toast.makeText(this, "菜单项1被点击", Toast.LENGTH_SHORT).show();break;case R.id.menu_item2:Toast.makeText(this, "菜单项2被点击", Toast.LENGTH_SHORT).show();break;default:return super.onOptionsItemSelected(item);}return true;}
}

最后,在资源文件夹(如res/menu)下创建一个名为menu_main.xml的文件,定义带图标的菜单项:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/menu_item1"android:icon="@drawable/ic_menu_item1"android:title="菜单项1" /><itemandroid:id="@+id/menu_item2"android:icon="@drawable/ic_menu_item2"android:title="菜单项2" />
</menu>

注意:请将@drawable/ic_menu_item1和@drawable/ic_menu_item2替换为实际的图标资源ID。

在Android中,showAsAction属性用于指定菜单项(MenuItem)在Toolbar中的显示方式。它有两个可选值:

never(默认值):菜单项不会显示在Toolbar上,而是显示在下拉菜单中。
ifRoom:如果Toolbar有足够的空间,菜单项会显示在Toolbar上;否则,它会显示在下拉菜单中。
例如,在menu资源文件中为一个菜单项设置showAsAction属性:

<itemandroid:id="@+id/action_search"android:icon="@drawable/ic_search"android:title="搜索"app:showAsAction="ifRoom" />

在这个例子中,当Toolbar有足够的空间时,搜索图标会显示在Toolbar上;否则,它会显示在下拉菜单中。

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

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

相关文章

人工智能在安全领域的应用

ChatGPT 等 AI 应用在网络安全领域的应用效果明显&#xff0c;其自动编程能力、分析能力及自身集成的知识库能够帮助网络安全从业者提升工作效率&#xff0c;改进组织的网络安全计划。 &#xff08;一&#xff09;代码生成与检测能力 可用于开发漏洞挖掘工具。如目前可以利用…

欧拉函数与欧拉定理

文章目录 AcWing 873. 欧拉函数题目链接欧拉函数欧拉函数的证明思路CODE时间复杂度分析 AcWing 874. 筛法求欧拉函数题目链接问题分析与时间复杂度CODE思路 欧拉定理 AcWing 873. 欧拉函数 题目链接 https://www.acwing.com/activity/content/problem/content/942/ 欧拉函数 …

数据结构与算法-动态规划-换钱的方法数

换钱的方法数 【题目】 给定数组 arr&#xff0c;arr 中所有的值都为正数且不重复。每个值代表一种面值的货币&#xff0c;每种面值 的货币可以使用任意张&#xff0c;再给定一个整数 aim&#xff0c;代表要找的钱数&#xff0c;求换钱有多少种方法。 【举例】 arr[5,10,25,1…

阶段五:深度学习和人工智能(学习如何构建和训练神经网络模型)

构建和训练神经网络模型是深度学习的核心任务之一。Python 是一种常用的编程语言,因为它有许多强大的库和框架,例如 TensorFlow、PyTorch、Keras 等,这些库和框架可以帮助我们更轻松地构建和训练神经网络模型。 下面是一个简单的示例,演示如何使用 Keras 构建和训练一个简…

Keil新建STM32软件工程 - (详细步骤图文)

文章目录 1. 前言2. 下载芯片对应的Keil开发包3. 下载芯片对应的标准外设库 - STM32F10x_StdPeriph_Lib_Vx.x.x4. 新建工程文件夹 - Demo34.1 移植标准外设库4.2 启动文件介绍及如何选择 5. 新建软件工程 - Demo5.1 打开Keil → Project → New uVision Project5.2 选择芯片型号…

从头到尾的数据之旅

目录 引言 链表介绍 单向链表的接口实现 结构 创建节点 头插 尾插 头删 尾删 打印 节点查找 节点前插入 节点删除 内存释放 总结 引言 在前面的学习中&#xff0c;我们深入了解了顺序表&#xff0c;通过其增删查改的操作&#xff0c;我们发现了顺序表在某些情况…

OpenGL学习(二)绘制三维图形 固定管线

一.简单步骤 考虑顶点数据上色旋转 二.完整代码 myopenglwidget.h // An highlighted block #ifndef MYOPENGLWIDGET_H #define MYOPENGLWIDGET_H #include <QOpenGLWidget> #include <QOpenGLFunctions> #include <QOpenGLShaderProgram> #include <Q…

2023年福建省职业院校技能大赛中职组“网络安全”赛项规程含竞赛样题

2023年福建省职业院校技能大赛 中职组“网络安全”赛项规程 目录 一、赛项名称 二、竞赛目的 三、竞赛内容 四、竞赛方式 五、竞赛试题 六、竞赛规则 七、竞赛环境 八、技术规范 九、技术平台 十、成绩评定 十一、申诉与仲裁 十二、竞赛观摩 十三、竞赛视频 十…

如何批量给文件名加相同字段?

如何批量给文件名加相同字段&#xff1f;文件名批量修改是一项蕴藏了非常多知识的电脑操作技能&#xff0c;批量修改文件名称不仅仅是修改名称这么简单&#xff0c;有时候我们还可能需要批量王文件名称中添加一些相同的文字字段&#xff0c;批量操作注重的是高效率&#xff0c;…

docker 搭建 redis 主从节点

拉取 redis 镜像&#xff0c;比如拉取 redis v6.0.6 版本 docker pull redis:6.0.6docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE redis 6.0.6 7f7ce731b26f 4 weeks ago 158MB在你的工作目录下面创建 redis/write 和 redis/read 目…

Ubuntu(WSL)卸载与安装指定版本的 openssl

卸载 openssl 1&#xff09;查找并删除 openssl 关联的目录与文件 whereis opensslwhich opensslrm -rf /a/b/c/ // 使用 rm 命令删除所有 openssl 相关目录 2&#xff09;删除软件安装包 apt-get purge openssl 3&#xff09;删除配置文件 rm -rf /etc/ssl 安装 ope…

《Vue.js设计与实现》—Vue3响应系统的原理

一、响应式数据与副作用函数 1. 副作用函数 1-1 指令材料 在JavaScript中&#xff0c;副作用函数是指在执行过程中对外部环境产生可观察的变化或影响的函数。这种函数通常会修改全局变量、修改传入的参数、执行I/O操作&#xff08;如读写文件或发送网络请求&#xff09;、修…

论文阅读《Learning Adaptive Dense Event Stereo from the Image Domain》

论文地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/html/Cho_Learning_Adaptive_Dense_Event_Stereo_From_the_Image_Domain_CVPR_2023_paper.html 概述 事件相机在低光照条件下可以稳定工作&#xff0c;然而&#xff0c;基于事件相机的立体方法在域迁移时性…

【教程】开始使用ipaguard进行代码加固混淆

开始使用ipaguard 前言 iOS加固保护是直接针对ios ipa二进制文件的保护技术&#xff0c;可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护&#xff0c;防止应用程序中的代码及资源文件被恶意篡改。Ipa Guard通过…

springMVC 学习总结(三) 拦截器及统一异常处理

一.拦截器 1.拦截器与过滤器的区别 拦截器 Interceptor 和 过滤器 Filter类似&#xff0c;主要用于拦截用户请求并作出一定处理操作&#xff0c; 但两则也有不同之处&#xff0c;如过滤器只在Servlet前后起作用&#xff0c;是Servlet规范定义的&#xff0c;是Servlt容器才支…

NGINX高性能服务器与关键概念解析

目录 1 NGINX简介2 NGINX的特性3 正向代理4 反向代理5 负载均衡6 动静分离7 高可用8 结语 1 NGINX简介 NGINX&#xff08;“engine x”&#xff09;在网络服务器和代理服务器领域备受推崇。作为一款高性能的 HTTP 和反向代理服务器&#xff0c;它以轻量级、高并发处理能力以及…

2-1基础算法-枚举/模拟

文章目录 1.枚举2.模拟 1.枚举 [例1] 特别数的和 评测系统 #include <iostream> using namespace std; bool pa(int x) {while (x) {if (x % 10 2 || x % 10 1 || x % 10 0 || x % 10 9) {return true;}else {x x / 10;}}return false; } int main() {int sum0;i…

【pytest】单元测试文件的写法

前言 可怜的宾馆&#xff0c;可怜得像被12月的冷雨淋湿的一条三只腿的黑狗。——《舞舞舞》 \;\\\;\\\; 目录 前言test_1或s_test格式非测试文件pytest.fixture()装饰器pytestselenium test_1或s_test格式 要么 test_前缀 在前&#xff0c;要么 _test后缀 在后&#xff01; …

Java 项目中引入jar包、Maven中打包第三方jar包

文章目录 前言方式一 项目中引入jar包步骤1 导入jar包步骤2 添加第三方jar包的引用步骤3 maven编译的时候能将第三方包编入方式二 Maven中打包第三方jar包步骤1 安装jar包到Maven仓库步骤2 项目中引入依赖前言 在Java项目中,我们经常需要引入第三方的jar包来扩展项目的功能。…

低压无功补偿在分布式光伏现场中的应用

摘要&#xff1a;分布式光伏电站由于建设时间短、技术成熟、收益明显而发展迅速&#xff0c;但光伏并网引起用户功率因数异常的问题也逐渐凸显。针对分布式光伏电站接入配电网后功率因数降低的问题&#xff0c;本文分析了低压无功补偿装置补偿失效的原因&#xff0c;并提出了一…