安卓复习之旅—style和theme的作用及用法

转自:http://blog.csdn.net/anddlecn/article/details/51758688
概述
主题与风格是包含与被包含的关系。例如同一个主题中,按钮使用一种风格,进度条使用一种风格。可以说主题是由具备各种风格的组件组合起来的。

从下面定义的主题例子中,我们可以看到

这个主题里面的文字,使用的是TextAppearance.DeviceDefault风格;
这个主题里面的按钮,使用的是Widget.DeviceDefault.Button风格;
这个主题的窗口标题,使用的是WindowTitle.DeviceDefault风格;

<style name="Theme.DeviceDefault" parent="Theme.Material" >
        <!-- Text styles -->
        <item name="textAppearance">@style/TextAppearance.DeviceDefault</item>
         <!-- Button styles -->
        <item name="buttonStyle">@style/Widget.DeviceDefault.Button</item>
        <!-- Window attributes -->
        <item name="windowTitleStyle">@style/WindowTitle.DeviceDefault</item>
        ......
<style/>

style的定义
在res\values目录下,新建一个styles.xml文件;
在新建的文件中,使用style标签,在标签中为定义的主题取个名字,例如name=”BtnStyle”;
在style标签内部,使用item标签,为需要定制的属性设置新的值;

<resources>
    <style name="BtnStyle">
        <item name="android:textStyle">bold</item>
        <item name="android:textSize">35sp</item>
        <item name="android:textColor">#FFFFFFFF</item>
    </style>
</resources>

style的继承
style也可以从已有的style继承而来。
style有两种继承方式,一种是显式继承,一种是隐式继承。

  1. 显式继承
    继承已有的style时,使用parent=属性,在子style中,定义需要扩展或者需要覆盖的属性,
<style name="ExBtnStyle" parent="@style/BtnStyle">

    <!--增加了background属性的设定-->
    <item name="android:background">@drawable/btn_selector</item>

    <!--覆盖了父style中的textColor属性-->
    <item name="android:textColor">#FFFFFFFF</item>
</style>
  1. 隐式继承
    继承已有的style,给新style以.为分隔符取名,例如”BtnStyle.ExBtnStyle,被继承的style名称要放在前面;在子style中,定义需要扩展或者需要覆盖的属性,
<style name="BtnStyle.ExBtnStyle">

    <!--增加了background属性的设定-->
    <item name="android:background">@drawable/btn_selector</item>

    <!--覆盖了父style中的textColor属性-->
    <item name="android:textColor">#FFFFFFFF</item>
</style>

style的使用

  1. 直接针对具体的控件使用。 通过控件的style属性设置,
<Button
    android:id="@+id/btn_3"
    android:text="3"
    <!--通过style属性设置-->
    style="@style/BaseBtnStyle.DigitalBtnStyle" />
  1. 提供给theme使用。
<style name="Theme.DeviceDefault" parent="Theme.Material" >

        <item name="textAppearance">@style/TextAppearance.DeviceDefault</item>

<style/>

theme的定义
theme的定义与style的定义完全一样,一样的标签、一样的写法,

在res\values目录下,新建一个themes.xml文件(如果使用styles.xml文件)也可以;
在新建的文件中,使用style标签,在标签中为定义的主题取个名字,例如name=”Mytheme”;
在style标签内部,使用item标签,为需要定制的属性设置新的值;

<resources>
    <style name="MyTheme">
        <item name="colorPrimary">#FFFF0000</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

theme的继承
theme的继承与style的继承完全一样
theme也可以从已有的theme继承而来。
theme与style一样,有两种继承方式,一种是显式继承,一种是隐式继承。
theme的使用
theme常用在两种地方,一个是应用,一个是Activity。

  1. 应用使用theme
<application
    <!--指定应用的theme-->
    android:theme="@style/MyTheme">

动态设置主题:
@Override
public void onCreate() {
super.onCreate();

this.setTheme(R.style.MyTheme);

}
2. Activity使用theme

<activity android:name=".MainActivity"
    <!--指定应用的theme-->
    android:theme="@style/MyTheme">

动态设置主题:

@Override
public void onCreate() {
    super.onCreate();

    this.setTheme(R.style.MyTheme);
}

theme可用的各种属性
theme可以设置的属性很多,可以参考安卓的系统源码themes.xml themes_device_defaults.xml themes_material.xml themes_holo.xml等,里面使用了很多定义主题时用到的属性。

不过里面有的属性是不对应用层开放的,在应用层使用的这些属性的时候,如果遇到编译错误,那么多半就是这个原因。

系统主题的属性很多,我们将选择性的介绍一些重要属性的用法和效果。

调色板属性

调色板属性是主题最为重要的属性,它决定了主题的配色。这些属性包括,

android:colorPrimaryDark:
android:colorPrimary:
android:colorAccent:
android:colorEdgeEffect:
android:colorControlNormal:
android:colorControlActivated:
android:colorControlHighlight:
android:colorButtonNormal:
android:colorSwitchThumbNormal:
如果一款应用设计了自己的配色方案,那么修改这些属性,会让开发的效率大大提高。

系统主题
安卓系统内置了很多种主题,它们各有各的特点,也具有很多共同的性质。

按照设计思路,分成三个大类:

  1. theme:这是安卓系统刚诞生时使用的界面元素设计理念,具有暗色和亮色两种风格;
    这里写图片描述
  2. Holo:这是安卓系统3.0时开始使用的界面元素设计理念,具有暗色和亮色两种风格;
    这里写图片描述
  3. Material:这是安卓系统5.0时开始使用的界面元素设计理念,具有暗色和亮色两种风格;
    这里写图片描述

以上三个大类下面还有很多主题,可以通过Android Studio提供的preview工具看到这些主题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值