Android主题theme和风格style总结

用到了Android的主题和风格,感觉很多地方需要总结和记录下来。其实主题和风格是有很大的作用的,特别是界面要求比较高的客户端。

Style:是一个包含一种或者多种格式化属性的集合,我们可以将其用为一个单位用在布局XML单个元素当中。比如,我们可以定义一种风格来定义文本的字号大小和颜色,然后将其用在View元素的一个特定的实例。 

如何定义style?
style也属于resource,所以要在resource下定义,就像定义string,color一样
定义style,需要指定name,style通常包含一个或多个item,每个item的name是android view的属性的名字,值则是对应相关属性的值
可以给style指定parent,从而可以继承和覆盖parent style的属性,parent取值是另外一个style,如果是继承自自己定义的style,只需要在命名style时增加前缀,这个前缀就是即将继承的style的名字

例如CodeFont是一个自己定义的style,那么下面的style,CodeFont.Red,则继承了CodeFont,只是文本的颜色修改成了红色

<style name="CodeFont.Red"> 红色           <item name="android:textColor">#FF0000</item>     </style>    <style name="CodeFont.Red.Big">  红色,并且大字体           <item name="android:textSize">30sp</item>     </style>  

也可以继承平台的style,可继承的样式请参照绍docs/guide/topics/ui/themes.html#PlatformStyles

<style name="CodeFont" parent="@android:style/TextAppearance">   

如果父样式的值不符合你的需求,你也可以对它进行修改,和CSS中的覆盖效果一样,都是以最后的为准,  

在style中可以定义的属性
都有哪些属性在style的定义里是有效的呢?具体请参考docs/reference/android/R.attr.html
在view上使用style时,对view有效的属性起作用,无效的则会忽略
有一些属性对view无效,只对theme有效,在R.attr定义中以window开头的一些属性只对theme有效

style的使用
如果给view指定style,那么这个style只对该view有效
如果给viewgroup指定style,那么viewgroup下的元素也不会应用这个style,除非特别指定
给view指定style时,没有android:前缀,而只是style

下面是具体用法:

首先在res/values下新建一style.xml文件:

<?xml version="1.0" encoding="utf-8"?>   <resources>       <style name="TitleStyle">           <item name="android:textSize">18sp</item>           <item name="android:textColor">#ec9237</item>       </style>       <style name="Title" parent="@style/TitleStyle">           <item name="android:textSize">5sp</item>       </style>   </resources>  

在layout.xml中的应用:

<EditText android:layout_height="wrap_content"        android:text="EditText"        style="@style/Title"       android:layout_width="fill_parent"        android:id="@+id/editText1"></EditText>  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwdgxs.html