很早前就看到Android SDK中关于Applying Styles and Themes的介绍与说明,今天总算有时间来体验下了。和web中的CSS一样,Android也可以为界面定义全局、公用的Style。Styles和 Themes都是资源,存放在res/values文件夹下。
首先,什么是Style,什么是Theme?
-
Style:是一个包含一种或者多种格式化属性的集合,我们可以将其用为一个单位用在布局XML单个元素当中。比如,我们可以定义一种风格来定义文本的字号大小和颜色,然后将其用在View元素的一个特定的实例。
-
Theme:是一个包含一种或者多种格式化属性的集合,我们可以将其为一个单位用在应用中所有的Activity当中或者应用中的某个 Activity当 中。比如,我们可以定义一个Theme,它为window frame和panel 的前景和背景定义了一组颜色,并为菜单定义可文字的大小和颜色属性,可以将这个Theme应用在你程序当中所有的Activity里。
其次,定义Styles和Themes资源的XML文档的结构
对每一个Styles和Themes,给<style>元素增加一个全局唯一的名字,也可以选择增加一个父类属性。在后边我们可以用这 个名字来应用风格,而父类属性标识了当前风格是继承于哪个风格。在<style>元素内部,申明一个或者多个<item>,每一 个<item>定义了一个名字属性,并且在元素内部定义了这个风格的值。
然后,看个自定义的Styles的实例
-
在res/values 目录下新建一个名叫style.xml的文件。
-
在style.xml定义内容如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<style name=”DavidStyleText1″>
<item name=”android:textSize”>18sp</item>
<item name=”android:textColor”>#EC9237</item>
</style>
<style name=”DavidStyleText2″>
<item name=”android:textSize”>14sp</item>
<item name=”android:textColor”>#FF7F7C</item>
<item name=”android:fromAlpha”>0.0</item>
<item name=”android:toAlpha”>0.0</item>
</style>
</resources>
上面样式的定义,从字面意思就可以了解其功能了,下面看看如何应用它吧:
<!– 应用样式1的TextView –>
<TextView
style=”@style/DavidStyleText1″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:gravity=”center_vertical|center_horizontal”
android:text=”moandroid”/>
<!– 应用样式2的TextView –>
<TextView
style=”@style/DavidStyleText2″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:gravity=”center_vertical|center_horizontal”
android:text=”www.moandroid.com”
android:autoLink=”all”/>
现在这个EditText组件的所表现出来的风格就为我们在上边的XML文件中所定义的那样,如下:
看了新的界面是不是感觉漂亮多了,这也就是Styles的魅力吧。需要补充说明的是:单击超链接,还可以打开网页如下:
这是如何实现的了?TextView.setTextView不支持HTML TAG的输出,所以即便写成这样:
mTextView01.setText(”<a href=\”http://www.moandroid.com/\”>mo-android|享受Android带给我们的新体验< /a>”);实际输出时,也就是纯文本而已,并不会作HTML TAG的转换。但若撇开HTML TAG之外(如“<”开头的标记),在TextView里加上了android:autoLink=”all”,那么正文中若有网址 (http://),是可以被显示的。