大家都知道CSS,Android中也可以为界面定义全局、公用的Style。Styles和Themes都是资源,存放在res/values文件夹下。
Style:是一个包含一种或者多种属性的集合,可以将其作为一个单位用在布局XML中。比如,我们可以自定义TextView的风格——定义文本的字号大小和颜色。
<resources> <!-- textView --> <style name="StyleTextInfo1"> <item name="android:textSize">18.0sp</item> <item name="android:textColor">#ffffffff</item> <item name="android:paddingLeft">0.0dip</item> <item name="android:paddingRight">0.0dip</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_marginTop">3.0dip</item> <item name="android:layout_marginBottom">1.0dip</item> <item name="android:layout_gravity">center_vertical</item> <style><style name="StyleTextInfo1" mce_bogus="1"> <item name="android:textSize">18.0sp</item> <item name="android:textColor">#ffffffff</item> <item name="android:paddingLeft">0.0dip</item> <item name="android:paddingRight">0.0dip</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_marginTop">3.0dip</item> <item name="android:layout_marginBottom">1.0dip</item> <item name="android:layout_gravity">center_vertical</item> </style> </resources>
引用:
<!-- 引用定义好的TextView样式,如果这里的属性和样式里定义的属性重复,则这里会替换覆盖掉样式里定义的属性--> <TextView android:id="@+id/traderName" android:text="@string/traderName" style="@style/StyleTextInfo1" mce_style="@style/StyleTextInfo1"/> <Spinner android:id="@+id/traderNameS" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Spinner> </TableRow>
Theme:是一个包含一种或者多种属性的集合,我们可以将其作为一个单位,用在程序中所有的Activity当中或者用在程序中的某个Activity当中。
<style name="newtheme" parent="android:Theme.Black"> <item name="android:windowNoTitle">true</item> <item name="android:textSize">24sp</item> <item name="android:textColor">#FFFF0000</item> <style><style name="newtheme" parent="android:Theme.Black" mce_bogus="1"> <item name="android:windowNoTitle">true</item> <item name="android:textSize">24sp</item> <item name="android:textColor">#FFFF0000</item> </style>
在AndroidManifest.xml中引用:
<activity android:name="com.demo.StyleThemeDemo" android:theme="@style/newtheme"> <intent-filter> <action android:name="android.intent.action.MAIN"/> </intent-filter> </activity>
在代码中引用:
setTheme(R.style.newtheme);
将系统主题或自定义主题添加到Android Manifest中定义的<application>和<activity>元素中,但是主题不能应用在某一个单独的View里。
为了在程序中所有的Activity当中使用Theme,可以打开AndroidManifest.xml 文件,编辑<application>标签。
如果想实现一个Theme,但是想做一些轻微的改变,只需要将这个Theme添加为parent,我们可以按照我们的要求来修改这个Theme,可以修改在Theme.Dialog中定义的每个item元素的值,然后我们 在Android Manifest 文件中使用自定义的名字而不是Theme.Dialog。
如:
<style name="newtheme" parent="android:Theme.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:textSize">24sp</item> <item name="android:textColor">#FFFF0000</item> </mce:style><style name="newtheme" parent="android:Theme.Dialog" mce_bogus="1"> <item name="android:windowNoTitle">true</item> <item name="android:textSize">24sp</item> <item name="android:textColor">#FFFF0000</item></style>