Tint Color的理解和APP简单的主题化

Android Button背景设置失效的根源与Material Design解决方案 在Android UI开发中,控件样式定制是基础且高频的需求。其核心原理在于Android系统通过主题(Theme)和样式(Style)机制来统一管理应用视觉表现,这确保了界面的一致性和可维护性。从技术价值看,这种机制能显著提升开发效率并简化多状态(如按压、禁用)管理。尤其在引入Material Design设计语言后,系统对Button等基础控件的样式管理变得更加自动化与严格,旨在提供更佳的视觉体验和无障碍支持。常见的应用场景包括为按钮设置圆角、渐变或自定义按压效果。然而,开发者常会遇到直接设置`andr 阅读详情

自从iOS7,UIView有了一个新的属性tintColor,它是用来在视觉上说明屏幕上哪些控件是活跃的或者有相关的活动。例如bar button items和tab bar items默认使用tintColor。如果一个view没有显示地指定tintColor,它将继承父视图的tintColor,因此在整个视图层次结构中将有一个连锁反应。最简单的情况是你可以通过一行代码来给整个APP指定一个颜色主题:

[[UIApplication sharedApplication] keyWindow].tintColor = [UIColor orangeColor];
因为UIWindow继承自UIView,所以我们可以指定一个tintColor,然后应用内的所有子视图将继承这个颜色。为了证明tintColor对各种用户界面元素的影响,接下来将举一个tabbar应用的例子,第一个页面有6个按钮,每个按钮会改变UIWindow的tintColor为一个颜色。第二个页面将展示tintColor对不用界面元素的影响。左上角的 red按钮会设置UIView的tintColor,右上角的blue按钮会设置UIButton自身和tabbar的tintColor。最后UISegmentedControl将控制整个苹果图标的外观。当我们按下第一页的按钮的时候,UIButton的文本就会自动适应按钮指定的颜色。相似的,tabbar

上的图标和文本也会适应新的颜色。

相似地,我们可以设置指定视图的tintColor,假设一个有tabbar应用设置的UIWindow的tintColor为蓝色,为了区分出tab和主界面,我们可以设定主界面的tintColor为红色。iOS7之前实现要用很多行颜色设定的代码,但是现在只需要简单的一行代码改变主视图的tintColor来设定主视图自身和它所有子视图的颜色。

self.view.tintColor = [UIColor redColor];

设置按钮的tintColor会改变按钮上文本的颜色,但是不会改变按钮兄弟视图和父视图的颜色。

myButton.tintColor = [UIColor blueColor];

iOS7还能够在alert或者action sheet出现的时候去色或者“暗”着色。这向用户表明这些控件当前不可用。按下第二个页面的步进控件就会看到这个效果,如下图:

iOS7中UIImage添加了一个新的属性renderingMode,可以和tintColor结合着使用,renderingMode有三个选项,第一个是UIImageRenderingModeAutomatic,正如字面的意思自动根据UIImage的使用场景和tintColor来填充颜色,例如UIImageView不会根据tintColor渲染UIImage,而UIBarButtonItem会根据tintColor自动填充UIImage。第二个选项是UIImageRenderingModeAlwaysOriginal,UIImage总是会根据自身的颜色渲染图像。第三个是UIImageRenderingModeAlwaysTemplate,这个模式将会用tintColor渲染所有UIImage不透明的地方,也就是说设置为这个属性的UIImage被当做了一个模板,如果你希望图像的哪些部分不用tintColor渲染的话,你需要把哪些部分设置成完全透明的。在例子中的第二个界面中的Segmented控件展示了这个功能。

正如我们看到的,tintColor和renderingMode两个属性给了我们很用的功能,但是使用tintColor有几件事情我们需要注意,第一是tintColor不支持UIAppearance。这是非常不幸的,因为如果支持的话,我们可能通过几行代码就会改变整个APP的颜色,例如我们想要每一个UIButton以一个特殊颜色凸现出来,我们不得不单独的设置每一个按钮的tintColor。第二当获取一个UIView的tintColor的时候,总是返回一个有效的颜色。这是因为如果视图的tintColor是nil就会返回父视图的tintColor。如果所有的视图包括UIWindow的tintColor都是nil的话,UIWindow总会返回一个默认的值,这个值是RGB(0,122,255).第三如果你自定义了一个视图并且用到了tintColor,你应该实现tintColorDidChange方法以便于我们可以在必要的时候更新视图的渲染。

- (void)tintColorDidChange

这个方法的默认实现是执行标准的更新。例如你子类化了一个UIImageView并且image的renderingImage设置为UIImageRenderingModeAlwaysTemplate或者子类了UIButton,当tintColor更新的时候自动重绘。覆盖这个方法的目的是为了当tintColor改变的时候自定义一些行为。例如我们可以子类一个UIView来根据用户的选择改变颜色主题。例子中的颜色主题是橘色和黑色两个选项,当用户选择一个选项的时候,我们可以自定义UIView和设置tintColor为橙色,接下来可以设置子视图的tintColor为黑色。在iOS6中也有tintColor属性但是这个属性是用于navigation bars、tab bars、toolbars、search bars和scope bar的北京颜色。在iOS7中我们要设置这些控件的背景颜色我们应该使用barTintColor。

tintColor十分有用并且非常容易使用,通过这个属性用户就可以通过观看视图来判断当前哪些控件是活跃的并且有相关的活动。

Linux桌面Dock选型指南:原理、适配与十大工具实战 Linux Dock并非简单的任务栏美化组件,而是深度耦合X11/Wayland协议层、窗口管理器接口与桌面环境框架的系统级交互枢纽。其核心价值在于通过空间压缩提升工作流效率,解决高频应用快速切换、多屏任务分组、低配设备稳定运行等工程痛点。技术实现上涉及OpenGL/Vulkan渲染适配、D-Bus服务集成、_NET_WM_STRUT边缘锚定等底层机制,不同方案在Wayland支持、内存占用、Java GUI兼容性等方面存在显著差异。本文聚焦Linux桌面效能优化,结合Kali渗透测试、嵌入式开发、老硬件运 阅读详情

相关推荐

Android DayNight主题深度解析与全链路适配指南

Android深色模式(Night Mode)并非简单切换颜色,而是基于DayNight主题框架的系统级资源加载机制。其核心原理在于AppCompatDelegate通过ContextWrapper代理Resources,在运行时根据UI Mode动态匹配values-night等配置目录下的color、drawable、dimen等资源。该机制保障了从TextView文本色到自定义View绘制色的一致性响应,技术价值体现在跨版本兼容性、无障碍支持与Material You动态色彩协同能力。典型应用场景包括

weixin_30522183的博客 349

使用tintColor改变图片的颜色

self.myImage.image =[self.myImage.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]

sun199206的专栏 1139

Jetpack Compose图标开发全解析:从Material Icons到自定义矢量图

在Android应用开发中,图标作为用户界面的核心视觉元素,其实现方式直接影响应用的视觉一致性、性能和开发效率。从传统的XML布局到现代声明式UI框架,图标处理技术经历了显著演进。Jetpack Compose作为Android官方推荐的现代UI工具包,通过完全基于Kotlin的声明式范式,彻底改变了图标资源的加载、渲染和管理方式。其核心的Icon组件不仅支持动态着色和主题适配,还能与Material Design规范深度集成,同时兼容自定义矢量图标和第三方图标库。这种技术方案在提升开发效率的同时,也解决了

weixin_34161032的博客 367

ios 中的tintColor

在iOS 7后,UIView新增加了一个tintColor属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构。它主要是应用到诸如app图标、导航栏、按钮等一些控件上,以获取一些特定的视觉效果。 默认情况下,一个视图的tintColor是为nil的,这意味着视图将使用父视图的tint color值。当我们指定了一个视图的tintColor后,这个色值会自...

weixin_33762321的博客 188

学习记录——SIMPACK生成轨道谱文件的方法

生成轨道谱文件的方法,可以用于实测轨道谱导入和自制轨道谱导入仿真

weixin_51965897的博客 7804

Vlan的封装模式和端口讲解(Access、Trunk、Hypbrid端口)

Vlan(Virtual Local Area Network)虚拟局域网,将一个物理的LAN在逻辑上划分为多个广播域,在交换机上实现广播域隔离(增强局域网的安全性、限制广播风暴、简化网络管理)Vlan通过将二层数据帧打上Vlan标签(打上Vlan标签也就是封装Vlan),正常情况下,不同Vlan Tag的数据包是无法二层直接互访的,以此来实现广播域的隔离可以理解为一个Vlan对应一个广播域,同一Vlan内的主机可以二层直接通信,不同Vlan间的主机无法二层直接通信。

m0_49864110的博客 5643

OC之学习问题集

OC之学习问题集系统常用方法1.Class2.URL2.1 字符串太长转URL不全问题3.TextView3.1 Textview放弃第一响应者4.XIB4.1 xib添加手势报错5.属性5.1 属性的读写 系统常用方法 1.Class 是否是某个类或子类的实例 - (BOOL)isKindOfClass:(Class)aClass; 用来判断是否是某个类的实例 - (BOOL)isMe...

yong_19930826的博客 1195

​开源大模型实战:GLM-4.1V-Thinking本地部署教程(附API调用代码)

​在AI应用从“能用”向“好用”进阶的当下,​的需求愈发强烈:企业需保障数据安全(如医疗影像、金融报告不外传),开发者追求定制化能力(如微调模型适配垂直场景),科研团队则依赖离线环境处理敏感数据。智谱AI开源的​(10B级参数,支持图像、视频、文档多模态推理)凭借的优势,成为本地部署的热门选择。不过,对于“不想折腾技术”的普通用户或快速验证需求的团队而言,​,无需安装配置,打开即用,堪称“零门槛”体验的捷径。本文将分为两部分:先手把手教你​(适合有技术背景的用户),再对比介绍。

gogoMark的博客 1340

iOS 的 Tint Color 属性详解

做 iOS开发的程序员肯定都对 tintColor属性有一定的认识,但是对于新手iOS 开发人 员来说,在APP的界面设计中,对 tintColor属性的使用可能还是有些陌生,今天我们就来 聊聊tintColor属性的一些具体使用。 tintColor是 iOS7以后,UIView新增的属性,这个属性定义了一个非默认的着色颜色值,其值的设置会影响到以视图为根视图的整个视图层次结构。

ihoudf 1889

带有验证码的爆破(包含Burp suite工具爆破)

关于含有验证码爆破的一些总结!

weixin_43960066的博客 8693

基于FPGA的TDC延迟链优化与码密度校准方法(1)——原理与实现

本文深入探讨了基于FPGA的时间数字转换器(TDC)延迟链非均匀性问题及其码密度校准方法。通过分析工艺偏差、温度电压影响等根源,详细介绍了码密度测试原理、逐位校准技术及气泡消除算法,并分享了自适应校准策略与多场景应用实践,有效提升TDC测量精度至皮秒级。

kiwi8的博客 488

关于UITabbarItem定制选中与未选中两张图片的问题

原来已经发现自从iOS5开始,可以自定义UITabBarItem的选中与否的两张图片了,而且也测试过确实可以(可能当时用了一张小图片测试的,不是太严格)。后来看到腾讯新闻和新浪微博,发现他们都是自定义的UITabBarItem的两张图片,但是高度却只有44像素,也不知道为什么这么搞。今天做项目真正用到自定义图片了,发现图片和原有的TabBar相比向上偏移了数个像素。后来上网搜了一些答案,原来可以通

进阶码农的专栏 4465

化学科学催化反应产率预测之Transformer建模SMILES(Datawhale AI 夏令营)

循环神经网络:由于所有的前文信息都蕴含在一个隐向量中,随着序列长度的增加,早期的上下文信息会逐渐被遗忘。卷积神经网络:受限的上下文窗口在建模长文本时存在天然不足。需要多层卷积操作才能处理长文本。在本篇文章中,我们学习了Transformer的基本架构及其在化学反应产率预测中的应用。通过利用Transformer的Encoder部分对SMILES进行建模,我们能够更有效地捕捉序列数据的特征,从而提高模型的预测性能。

不想宅的冷同学 1096

151126Tint Color的理解和APP简单的主题化

自从iOS7, UIView 有了一个新的属性 tintColor ,它是用来在视觉上说明屏幕上哪些控件是活跃的或者有相关的活动。例如 bar button items 和 tab bar items 默认使用tintColor 。如果一个 view 没有显示地指定 tintColor ,它将继承父视图的 tintColor ,因此在整个视图层次结构中将有一个连锁反应。最简单的情况是你可以通过一行

lmyuanhang的专栏 1509

基于 Langchain 开发一个完整的支持多轮数据分析(直连 mysql 数据,多表综合分析 SQL 取数,数据分析,报表生成)ChatBI 系统(前后端完整实现源代码)

ChatBI系统开发摘要 本文介绍了基于Langchain的多轮数据分析ChatBI系统开发方案。该系统支持MySQL数据库连接,提供多表分析、SQL查询、数据分析和报表生成功能。系统采用前后端分离架构:前端使用React+Ant Design+ECharts实现交互界面;后端基于FastAPI搭建服务,集成Langchain处理自然语言到SQL的转换;核心技术栈还包括SQLAlchemy、Pandas和Matplotlib。 系统核心模块包括: 数据库连接层:使用SQLAlchemy管理MySQL连接 L

AI天才研究院 816

29、Power BI 中行级安全(RLS)的实现与应用

本文详细介绍了在Power BI中实现行级安全(RLS)的方法,包括静态RLS和动态RLS的实现流程、适用场景及对比分析。通过具体业务场景,展示了如何创建安全角色、定义规则、验证角色、发布模型以及分配成员。此外,还探讨了更复杂的动态RLS场景,如基于父子层次结构的数据访问控制和从外部源获取用户信息的实现方式。文章最后总结了最佳实践建议及未来发展趋势,为企业在Power BI中高效、安全地实施数据访问控制提供了全面指导。

terraform7cloud的博客 195

关于Tint Color

由于项目中很少能用到Tint Color所以对其了解一直很模糊,

borntofight's blog 1588

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

浅谈 Android L 的 Tint(着色)

浅谈 Android L 的 Tint(着色)Tint 是什么?Tint 翻译为着色。着色,着什么色呢,和背景有关?当然是着背景的色。当我们开发 App 的时候,如果使用了 Theme.AppCompat 主题的时候,会发现 ActionBar 或者 Toolbar 及相应的控件的颜色会相应的变成我们在 Theme 中设置的 colorPrimary, colorPrimaryDark, color

liz3002的专栏 2474

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android开发中颜色透明度的全面解析:从ARGB原理到工程实践

在移动应用开发中,颜色处理是UI实现的基础技术之一,其中透明度控制直接影响着视觉层次与用户体验。其核心原理基于ARGB色彩模型,通过Alpha通道的十六进制值来调节不透明度,这涉及到颜色在内存中的整数表示与位运算操作。掌握透明度设置的技术价值在于,它不仅是实现美观半透明效果的关键,更是优化性能、避免过度绘制的重要环节。在Android开发实践中,这一技术广泛应用于状态选择器、Material Design组件着色、主题适配等场景。本文聚焦Android平台,深入探讨了颜色透明度的正确设置方法、常见陷阱如Im

weixin_34318272的博客 360

visionOS 2 开发实战:利用 Siri 与 App Intents 框架构建空间智能应用

在空间计算和混合现实领域,自然语言交互正成为连接用户与三维环境的关键桥梁。其核心原理在于通过意图识别框架,将用户的语音指令解析为可执行的应用功能。这项技术的价值在于极大降低了复杂三维空间的操作门槛,使交互更直观、高效。在 visionOS 这样的空间操作系统中,结合设备端机器学习,AI能够理解手势、眼动及物体位置等多模态上下文,从而实现精准的空间任务执行。本文聚焦于 visionOS 2 的 **Siri** 与 **App Intents** 框架,通过一个完整的 3D 画廊应用实战案例,详细演示了如何为

weixin_30892763的博客 301

visionOS 2.7 Siri AI深度解析:空间计算与App Intents开发实战

在人工智能与操作系统深度融合的趋势下,多模态感知和自然语言交互正成为下一代人机界面的核心。其原理在于,系统通过整合视觉、语音及空间数据,构建统一的情境理解模型,使AI能解析模糊指令并关联物理环境。这一技术的核心价值在于,它将复杂的感知与推理能力封装为系统级服务,显著降低了开发智能情境感知应用的门槛。在应用场景上,它尤其适用于需要将数字内容与真实空间无缝融合的领域,如混合现实协作、空间化生产力工具及沉浸式教育应用。本文以visionOS 2.7中Siri AI的升级为具体案例,详细阐述了开发者如何利用App

weixin_34406086的博客 468

AestheticDialogs 令牌(Tokens)设计系统详解:颜色、间距、排版与动效的语义化清单

AestheticDialogs 是一个基于 Jetpack Compose 的 Android 对话框库,它的核心竞争力来自一套完整的**设计令牌(Design Tokens)**系统:颜色、间距、排版、形状、阴影和动效全部被抽象成语义化令牌,组件只读令牌、不读裸值。本文带你用清单的方式,逐层看懂这套令牌架构是如何让"主题化"变成一次纯粹的重新映射。 [![AestheticDialogs 设

gitblog_00532的博客 797

Jetpack Compose图标开发指南:从基础使用到性能优化

在Android应用开发中,图标是构建用户界面的基础视觉元素,其实现方式直接影响着应用的视觉一致性和开发效率。传统XML布局通过ImageView和资源引用来管理图标,而现代声明式UI框架Jetpack Compose则引入了全新的Icon可组合函数范式。这一转变不仅仅是API的替换,更代表着从命令式到声明式的设计理念升级。在Compose中,图标被视为纯粹的UI描述,开发者可以像处理文本一样轻松地控制其颜色、尺寸和动画效果,无需维护多套资源文件。这种声明式特性与Material Design 3深度集成,

weixin_30681615的博客 288
上一篇: UIView 中常见的方法总结
下一篇: iOSAPI翻译集合
Man_OC
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值