你需要了解的Android主题相关知识

在 Android 开发中,主题(Theme)是用于定义应用的视觉风格的一组样式集合。主题决定了应用的配色、字体样式、控件外观等,是整个应用的一致性视觉体验的重要组成部分。以下是对 Android 主题的全面介绍,包括主题的基础概念、设置方式、常见主题类型以及主题定制。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0cc5c0fdaf054e869bb39643569e66bc.png#pic_center =300)

1. 什么是 Android 主题?

在 Android 中,主题是一种样式集合,应用到 Activity 或应用程序级别,用于设置界面的统一外观和行为。与样式(style)不同的是,主题更具全局性,影响到所有子元素的显示方式,比如颜色、字体、形状等。每个主题可以包含多个属性,例如背景色、前景色、按钮样式等。

2. 设置主题的方法

在 Android 应用中设置主题有多种方法:

  • 在 AndroidManifest.xml 中设置:可以在应用或 Activity 级别为应用设置主题。
  • 动态更改主题:在代码中更改主题,允许应用在运行时动态切换主题。

2.1 在 AndroidManifest.xml 中设置主题

AndroidManifest.xml 文件中,可以通过 android:theme 属性来设置应用或 Activity 的主题。例如:

<applicationandroid:theme="@style/Theme.MyCustomTheme"><activityandroid:name=".MainActivity"android:theme="@style/Theme.MyActivityTheme"></activity>
</application>
  • 在 <application> 标签内定义的主题会应用于整个应用。
  • 在 <activity> 标签内定义的主题会应用于该特定 Activity。

2.2 动态更改主题

通过代码动态切换主题,通常用于支持深色模式或夜间模式切换。示例:

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {setTheme(R.style.Theme_MyCustomTheme) // 设置自定义主题super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)}
}

3. Android 主题的类型

3.1 基础主题

Android SDK 提供了许多基础主题,主要分为以下几种:

  • Material Design 主题:自 Android 5.0 引入,主要包括 Theme.MaterialComponents 和 Theme.AppCompat 两种类型。
  • Holo 主题:适用于 Android 3.0 以上的设备,已逐渐被 Material 主题替代。
  • 系统默认主题:Android 系统版本的默认主题,例如 Theme.DeviceDefault。

3.2 Material Design 主题

Material Design 是 Android 推出的设计规范,Material 主题是其实现方式之一。使用 Material 主题可以轻松创建符合 Material Design 规范的应用界面,主要包括以下几种主题:

  • Theme.MaterialComponents.Light:浅色主题。
  • Theme.MaterialComponents.Dark:深色主题。
  • Theme.MaterialComponents.DayNight:自动切换日夜模式的主题。
    使用 MaterialComponents 主题时,还可以利用丰富的 Material 组件(如按钮、对话框、文本框等),并通过主题自定义应用的颜色、形状等。

3.3 AppCompat 主题

AppCompat 主题(Theme.AppCompat)支持向后兼容,可以在旧版本 Android 上使用 Material Design 组件。通常使用以下几种:

  • Theme.AppCompat.Light:浅色模式。
  • Theme.AppCompat.Dark:深色模式。
  • Theme.AppCompat.DayNight:日夜自动切换主题。

4. 定制主题

自定义主题使得应用的视觉效果更加个性化,通常通过在 res/values/themes.xml 中定义新主题:

4.1 定义自定义主题

themes.xml 中定义一个新的主题:

<resources><!-- 基础主题设置 --><style name="Theme.MyCustomTheme" parent="Theme.MaterialComponents.DayNight"><!-- 颜色设置 --><item name="colorPrimary">@color/my_primary_color</item><item name="colorPrimaryVariant">@color/my_primary_variant</item><item name="colorOnPrimary">@color/white</item><!-- 字体和背景 --><item name="android:fontFamily">@font/my_custom_font</item><item name="android:background">?android:attr/colorBackground</item></style>
</resources>

4.2 定制控件样式

可以在主题中直接为控件指定样式,例如按钮、文本框等:

<style name="Theme.MyCustomTheme" parent="Theme.MaterialComponents.DayNight"><item name="buttonStyle">@style/MyButtonStyle</item>
</style><style name="MyButtonStyle" parent="Widget.MaterialComponents.Button"><item name="android:backgroundTint">@color/my_button_color</item><item name="android:textColor">@color/white</item>
</style>

5. 深色模式支持

Android Q 引入了系统级深色模式(Dark Mode),应用可以使用 DayNight 主题轻松支持深色模式。要实现深色模式支持,可以定义夜间模式的主题资源:

<!-- res/values-night/themes.xml -->
<resources><style name="Theme.MyCustomTheme" parent="Theme.MaterialComponents.DayNight"><item name="colorPrimary">@color/my_primary_dark</item><item name="colorOnPrimary">@color/black</item></style>
</resources>

启用深色模式时,应用会自动加载 values-night 中的主题资源。

6. 动态切换主题示例

在某些应用中,可能需要用户在浅色和深色主题之间切换。可以通过 AppCompatDelegate 来实现动态切换:

fun switchTheme(isNightMode: Boolean) {AppCompatDelegate.setDefaultNightMode(if (isNightMode) AppCompatDelegate.MODE_NIGHT_YES else AppCompatDelegate.MODE_NIGHT_NO)
}

通过这种方式,用户可以在运行时手动切换主题模式。

总结

Android 主题提供了强大的工具来统一和美化应用的视觉设计。从基础的 Material 主题到自定义主题,开发者可以利用丰富的组件和资源来创建符合品牌和用户需求的界面。

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

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

相关文章

寻找符合要求的最长子串

题目描述 给定一个字符串 s s s &#xff0c;找出这样一个子串&#xff1a; 1&#xff09;该子串中的任意一个字符最多出现2次&#xff1b; 2&#xff09;该子串不包含指定某个字符&#xff1b; 请你找出满足该条件的最长子串的长度。 输入描述&#xff1a; 第一行为要求…

【Linux 从基础到进阶】 灾难恢复自动化工具与脚本

灾难恢复自动化工具与脚本 在现代企业中&#xff0c;自动化工具和脚本在灾难恢复&#xff08;Disaster Recovery, DR&#xff09;中扮演着至关重要的角色。它们不仅提高了恢复过程的效率和准确性&#xff0c;还减少了人为错误的风险。本文将介绍一些常用的灾难恢复自动化工具及…

「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

本篇将带领你实现一个倒计时和提醒功能的应用&#xff0c;用户可以设置倒计时时间并开始计时。当倒计时结束时&#xff0c;应用会显示提醒。该项目涉及时间控制、状态管理和用户交互&#xff0c;是学习鸿蒙应用开发的绝佳实践项目。 关键词 UI互动应用倒计时器状态管理用户交互…

重装系统后,把Anaconda从硬盘恢复方法(亲测可用)

1.首先保证安装目录文件完整 2.添加系统环境变量 E:\anaconda E:\anaconda\Scripts E:\anaconda\Library\bin E:\anaconda\Library\mingw-w643然后进入安装目录打开cmd命令窗口&#xff0c;输入一下如下命令 python .\Lib\_nsis.py mkmenus4.如果需要cuda恢复&#xff0c;只…

Linux动态库和静态库

1&#xff0c;手动制作静态库 1&#xff0c;如何形成静态库文件 做库时&#xff0c;头文件(.h)必须暴露&#xff0c;源文件(.c)必须隐藏。 操作&#xff1a;将需要形成库的文件编译成.o文件&#xff1a; 然后用指令&#xff1a;ar -rc libmy_stdio.a my_stdio.o my_string.o…

java基础之 String\StringBuffer\ StringBuilder

文章目录 String字符串的创建为什么说String是不可变的&#xff1f;创建后的字符串存储在哪里&#xff1f;字符串的拼接String类的常用方法 StringBuilder & StringBuffer使用方法验证StringBuffer和StringBuilder的线程安全问题 总结三者区别什么情况下用运算符进行字符串…

【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(3)

前言 大家好吖&#xff0c;欢迎来到 YY 滴计算机网络 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的计算机网络题目&#xff0c;供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏&#xff01;…

告别繁琐统计,一键掌握微信数据

微信数据管理的挑战在数字时代&#xff0c;微信已成为我们日常沟通和商业活动的重要工具。然而&#xff0c;随着微信号数量的增加&#xff0c;手动统计每个账号的数据变得越来越繁琐。从好友数量到会话记录&#xff0c;再到转账和红包&#xff0c;每一项都需要耗费大量的时间和…

Oracle分区技术特性

Oracle 的分区是一种“分而治之”的技术&#xff0c;通过将大表、索引分成可以独立管理的、小的 Segment&#xff0c;从而避免了对每个对象作为一个大的、单独的 Segment 进行管理&#xff0c;为海量数据访问提供了可伸缩的性能。自从 Oracle 引入分区技术以来&#xff0c;Orac…

ArkTS常用数据处理:掌握核心技能与实践

在HarmonyOS应用开发中&#xff0c;ArkTS作为主要的开发语言&#xff0c;其数据处理能力是构建高效应用的关键。本文将详细介绍ArkTS中的常用数据处理方法&#xff0c;包括基本数据类型、数组、枚举、对象和XML解析与生成等&#xff0c;以及它们在实际开发中的应用和最佳实践。…

bert-base-chinese模型使用教程

向量编码和向量相似度展示 import torch from transformers import BertTokenizer, BertModel import numpy as npmodel_name "C:/Users/Administrator.DESKTOP-TPJL4TC/.cache/modelscope/hub/tiansz/bert-base-chinese"sentences [春眠不觉晓, 大梦谁先觉, 浓睡…

HTML+CSS科技感时钟(附源码!!!)

预览效果 源码(直接复制使用) <!DOCTYPE html> <html lang"zh-Hans"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>科技感时钟</…

Docker配置国内源加速

Docker配置国内源加速 添加配置文件/etc/docker/daemon.json, 内容如下&#xff1a; {"registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"] }本人使用的是阿里云服务器&#xff0c;所以配了个阿里云的 使配置生效 systemctl daemon-reload …

论文精读系列

​ ViT (Vision Transformer) 『论文精读』Vision Transformer(VIT)论文解读 ​

深入理解 ZooKeeper:分布式协调服务的核心与应用

一、引言 随着互联网技术的飞速发展&#xff0c;分布式系统的规模和复杂性不断增加。在分布式环境中&#xff0c;各个节点之间需要进行高效的协调和通信&#xff0c;以确保系统的正常运行。ZooKeeper 正是为了解决分布式系统中的协调问题而诞生的一款开源软件。它提供了一种简单…

PyQt5实战——UTF-8编码器功能的实现(六)

个人博客&#xff1a;苏三有春的博客 系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序…

‌MySQL中‌between and的基本用法‌

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段&#xff0c;包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…

微服务系列一:基础拆分实践

目录 前言 一、认识微服务 1.1 单体架构 VS 微服务架构 1.2 微服务的集大成者&#xff1a;SpringCloud 1.3 微服务拆分原则 1.4 微服务拆分方式 二、微服务拆分入门步骤 &#xff1a;以拆分商品模块为例 三、服务注册订阅与远程调用&#xff1a;以拆分购物车为例 3.1 …

Spring的常用注解之@Component——day1

1、Component Component&#xff1a;泛指各种组件&#xff1b;它允许 Spring 自动检测自定义 Bean。换句话说&#xff0c;无需编写任何明确的代码&#xff0c;Spring 就能做到&#xff1a; 扫描应用&#xff0c;查找注解为 Component 的类将它们实例化&#xff0c;并注入任何…

jvm学习笔记-轻量级锁内存模型

一&#xff0c;轻量级锁 LockRecord的那个第一个成员变量是拷贝对应锁定了的java对象资源的MarkWord&#xff0c;Lock Record有一个Ptr指针刚开始指向自己&#xff0c;后面这个指针存储在锁定资源的java对象的markword中&#xff0c;后续可以通过java对象的MarkWord快速定位到…