Android样式部分覆盖:如何让v16样式继承通用textColor?
如何让不同版本styles.xml中的样式共享通用属性
你现在的情况是在values/styles.xml里定义了标题栏文本样式,设置了文本颜色;但在v16/styles.xml里同名的样式只设置了字体,却想同时沿用前者的文本颜色,不用重复写属性对吧?其实利用Android样式的继承机制就能轻松实现,给你两种可行的方案:
方案一:创建基础通用样式
先在values/styles.xml里定义一个包含通用属性的基础样式,然后让两个版本的目标样式都继承它:
values/styles.xml
<!-- 基础样式:存放所有版本都需要的通用属性 --> <style name="BaseTitleBarTextAppearance" parent="android:TextAppearance"> <item name="android:textColor">@color/colorAccent</item> </style> <!-- 当前版本的目标样式,直接继承基础样式即可 --> <style name="TitleBarTextAppearance" parent="BaseTitleBarTextAppearance" />
v16/styles.xml
<!-- v16版本的目标样式,继承基础样式后添加专属属性 --> <style name="TitleBarTextAppearance" parent="BaseTitleBarTextAppearance"> <item name="android:fontFamily">@font/bilbo_swash_caps</item> </style>
这种方式的好处是结构清晰,通用属性集中管理,后续要修改通用样式时只需要改基础样式就行。
方案二:直接继承低版本的同名样式
Android的资源加载机制会优先加载对应API版本的资源,所以你可以让v16的样式直接继承values/styles.xml里的同名样式,这样就能自动继承其中的文本颜色属性:
values/styles.xml
<style name="TitleBarTextAppearance" parent="android:TextAppearance"> <item name="android:textColor">@color/colorAccent</item> </style>
v16/styles.xml
<!-- 直接继承低版本的TitleBarTextAppearance,自动获取textColor属性 --> <style name="TitleBarTextAppearance" parent="TitleBarTextAppearance"> <item name="android:fontFamily">@font/bilbo_swash_caps</item> </style>
这种方式更简洁,不需要额外创建基础样式,适合属性不多的场景。
两种方案都能实现你的需求,选哪种就看你项目的样式管理习惯啦~
内容的提问来源于stack exchange,提问作者Skusku
相关产品推荐
相关产品推荐

