Android Theme 主题与 Style 样式

一、定义

样式:是一个属性集合,用于指定单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性。

主题:是应用于整个应用、activity 或视图层次结构,而非仅仅应用于单个视图的属性集合。当您应用主题背景时,应用或 Activity 中的每个视图都会应用其支持的每个主题背景属性。主题还可以将样式应用于非视图元素,例如状态栏和窗口背景。

1.1 声明:

样式和主题在 res/values/ 中的样式资源文件中声明,通常命名为 styles.xml (文件名可以任意设置 res/values/xxx.xml) 

1.2 资源引用:

@style/style_name (style_name:元素中的 name 属性)

<?xml version="1.0" encoding="utf-8"?>
// 必需,根节点
<resources> 
    // style:定义单个样式。包含 item 元素
    // name:必需。样式的名称
    // parent:样式资源,会继承parent样式的属性
    <style name="CustomText" parent="@style/Text">
        // item:样式的单个属性
        // name:必需。属性资源,必要时带有包前缀(如:android.textColor)
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#008</item>
    </style>
</resources>

二、扩展和自定义样式

2.1 parent

为保持与系统界面样式的兼容性,应通过扩展框架或支持库中的现有样式来创建自己的样式。如需扩展样式,使用 parent 属性指定要扩展的样式。

<style name="GreenText" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00FF00</item>
</style>

注意:不推荐以上写法 parent="@android:style/TextAppearance"

应继承 Android 支持库中的核心应用样式,支持库中的样式会针对各版本中可用的界面属性进行优化。支持库中的样式通常与平台中的样式具有相似的名称,但包含 AppCompat

<style name="GreenText" parent="TextAppearance.AppCompat">
    <item name="android:textColor">#00FF00</item>
</style>

2.2 点分表示法

使用点分表示法(而非 parent 属性)扩展样式名称,从而继承样式(系统样式除外),通常仅适合用来扩展自己的样式,而不适合用来扩展其他库中的样式

<style name="GreenText.Large">
    <item name="android:textSize">22dp</item>
</style>

三、样式作为主题背景应用

您可以像创建样式一样创建主题背景。不同之处在于应用它的方式:您不是对视图应用具有 style 属性的样式,而是对 AndroidManifest.xml 文件中的 <application> 标记或 <activity> 标记应用具有 android:theme 属性的主题背景。

<manifest ... >
    <application android:theme="@style/Theme.AppCompat" ... >
    <activity android:theme="@style/Theme.AppCompat.Light" ... >
    </application>
</manifest>

还可以在布局文件中为视图指定 android:theme 属性。这会修改该视图及其任何子视图的主题背景,这对于更改界面中特定部分的主题背景调色板很有帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值