样式与主题

来源:互联网 发布:北京赛车软件下载 编辑:程序博客网 时间:2024/06/07 03:32

1.样式

样式是一套能够应用于视图组件的属性。

添加新样式的方式为:在res/values/styles.xml样式文件中,添加style标签,style标签中的name为新建的样式名,其中的@color/dark_blue为在res/values/colors.xml文件中定义好的颜色资源。如:

<style name="BeatBoxButton" >    <item name="android:background" >@color/dark_blue</item></style>
这样该样式就定义了背景色为深蓝色的属性值。定义好的样式,可以把它添加给需要修饰的按钮。如下图:

<Button xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        style="@style/BeatBoxButton"        android:id="@+id/list_item_button"        android:layout_width="match_parent"        android:layout_height="120dp"        tools:text="Sound name"/>
这样,由该样式所修饰的按钮背景色就是深蓝色的。

样式的继承

样式的继承方式有两种:第一种,以主题名的形式指定父主题,这样的样式不仅继承按钮的背景色,也会添加自己后面定义的粗体显示按钮文字的功能。

<style name="BeatBoxButton" >    <item name="android:background" >@color/dark_blue</item></style><style name="BeatBoxButton.Strong">    <item name="android:textStyle">bold</item></style>
第二种,采用指定父样式的形式。

<style name="BeatBoxButton" >    <item name="android:background" >@color/dark_blue</item></style><style name="StrongBeatBoxButton" parent="@style/BeatBoxButton">    <item name="android:textStyle">bold</item></style>
两种方式的区别:

要以主题名的形式指定父主题,有继承关系的两个主题都应处于同一个包中。因此,对于Android操作系统内部主题间的继承,就可以直接使用主题名继承表示法。但是如果要跨库继承,就一定要明确使用parent属性。

2.主题

主题是样式的进化加强版。样式属性适用于所有组件,而主题属性适用于整个应用。可以在AndroidManifest.xml文件的application标签下的theme属性处查看项目的默认主题。

AppCompat库自带三大主题:

Theme.AppCompat-----深色主题

Theme.AppCompat.Light----浅色主题

Theme.AppCompat.Light.DarkActionBar----带深色工具栏的浅色主题

3. 覆盖主题属性,以覆盖背景色属性为例。

第一步,打开styles.xml文件,按住Ctrl键(window系统)点击Theme.AppCompat,Android studio会定位到一个大文件的一行,如下图:

<style name="Theme.AppCompat" parent="Base.Theme.AppCompat"/>
该行表明Theme.AppCompat主题属性继承自Base.Theme.AppCompat,而Theme.AppCompat本身没有覆盖任何属性,仅仅指向父主题。

第二步:按住Ctrl键再点击Base.Theme.AppCompat,Android studio会提示这个主题有多个版本,选择Base.Theme.AppCompat (...\values\values.xml)版本

<style name="Base.Theme.AppCompat" parent="Base.V7.Theme.AppCompat"></style>

第三步,继续定位到Base.V7.Theme.AppCompat,如下图:

<style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">    <item name="windowNoTitle">false</item>    <item name="windowActionBar">true</item>    <item name="windowActionBarOverlay">false</item>    <item name="windowActionModeOverlay">false</item>    <item name="actionBarPopupTheme">@null</item>    <item name="colorBackgroundFloating">@color/background_floating_material_dark</item>    <!-- Used by MediaRouter -->    <item name="isLightTheme">false</item>
后面还有很多属性,但是没有要覆盖的背景色属性。

第四步,继续定位Platform.AppCompat,选择values-v11/values.xml版本。如下图:

<style name="Platform.AppCompat" parent="Platform.V11.AppCompat"/><style name="Platform.AppCompat.Light" parent="Platform.V11.AppCompat.Light"/><style name="Platform.V11.AppCompat" parent="android:Theme.Holo">    <item name="android:windowNoTitle">true</item>    <item name="android:windowActionBar">false</item>    <item name="android:buttonBarStyle">?attr/buttonBarStyle</item>    <item name="android:buttonBarButtonStyle">?attr/buttonBarButtonStyle</item>    <item name="android:borderlessButtonStyle">?attr/borderlessButtonStyle</item>    <!-- Window colors -->    <item name="android:colorForeground">@color/foreground_material_dark</item>
第五步:继续定位Platform.V11.AppCompat,定位到如图所示的一行:

<style name="Platform.V11.AppCompat" parent="android:Theme.Holo">
第六步:定位android:Theme.Helo主题,得到下图:

<style name="Theme.Holo">    <item name="colorForeground">@color/bright_foreground_holo_dark</item>    <item name="colorForegroundInverse">@color/bright_foreground_inverse_holo_dark</item>    <item name="colorBackground">@color/background_holo_dark</item>    <item name="colorBackgroundFloating">@color/background_holo_dark</item>    <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_holo_dark</item>    <item name="disabledAlpha">0.5</item>    <item name="backgroundDimAmount">0.6</item>
查看代码,可以看到colorBackground这个属性,这个属性就是用于主题背景色的属性。

第七步:回到res/values/styles.xml文件,覆盖colorBackground这个属性,如下图代码所示:

<resources>    <!-- Base application theme. -->    <style name="AppTheme" parent="Theme.AppCompat">        <item name="colorPrimary">@color/red</item>        <item name="colorPrimaryDark">@color/dark_red</item>        <item name="colorAccent">@color/gray</item>                        <item name="android:colorBackground">@color/soothing_blue</item>              
这样经过上述七步,就完成了修改应用主题的操作。