关于Android里面的Style(样式)和主题(Theme)资源
Theme是针对窗体级别的,改变窗体样式;
Style是针对窗体元素级别的,改变指定控件或者Layout的样式。
1、样式资源(Style)
android的样式包含一组格式,为一个组件设置使用某个样式时,该样式所包含的全部格式都会应用于该组件。
Android 的样式资源放在/res/values目录下。样式的根目录是<resources.../>元素,
<resources.../>里面可以存放多个<style.../>子元素,每个style定义的是一个样式。
<style.../>里面可以包含多个<item.../>子元素,每个item定义的是一个格式项
<resources>
<style name = "style1">
<item name = "android:textSize">20sp</item>
<item name = "android:textColor">#00d</item>
</style>
<style name = "style1" parent = "@style/style1">
<item name = "android:textSize">20sp</item>
<item name = "android:textColor">#000</item>
</style>
</resources>
这里面style元素有两个属性name(名字)和parent(该样式所继承的父样式)
定义了这两个样式后就可以在xml资源里面使用样式了,格式为 style = @style/style1
2、主题资源(Theme)
你通过在Android Manifest中定义的<application>和<activity>元素将主题添加到整个程序或者某个 Activity,但是主题是不能应用在某一个单独的View里。
主题依然在<style>元素里边申明,也是以同样的方式引用。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowFrame">@drawable/screen_frame</item>
<item name="windowBackground">@drawable/screen_background_white</item>
<item name="panelForegroundColor">#FF000000</item>
<item name="panelBackgroundColor">#FFFFFFFF</item>
<item name="panelTextColor">?panelForegroundColor</item>
<item name="panelTextSize">14</item>
<item name="menuItemTextColor">?panelTextColor</item>
<item name="menuItemTextSize">?panelTextSize</item>
</style>
</resources>
注意我们用了@符号和?符号来应用资源。@符号表明了我们应用的资源是前边定义过的(或者在前一个项目中或者在Android 框架中)。问号?表明了我们引用的资源的值在当前的主题当中定义过。通过引用在<item>里边定义的名字可以做到(panelTextColor 用的颜色和panelForegroundColor中定义的一样)。这中技巧只能用在XML资源当中。
让应用中全部窗口使用一个主题:打开AndroidManifest.xml 文件,编辑<application>标签,让其包含android:theme属性,值是一个主题的名字
<application android:theme="@style/CustomTheme">
想让你程序当中的某个Activity拥有这个主题,那么你可以修改<activity>标签。
<activity android:theme="@android:style/Theme.Dialog">
有内置主题:如Theme.Dialog <activity android:theme="@android:style/Theme.Dialog">
轻微的改变,你只需要将这个主题添加为父主题。比如我们修改Theme.Dialog主题。我们来继承Theme.Dialog来生成一个新的主题。
<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">