当我们在做一个apk的时候,有时候我们会遇到一些风格一致的控件,这时候我们就需要利用style来统一规定风格,避免在每个地方重复定义.样式被定义在一个XML资源文件中,跟设置布局的XML资源文件是分开的。这跟web设计中的CSS(层叠样式表)相似,就是页面和样式分隔开来。style我们可以应用到控件上,也可以应用到activity上或者整个application上,这时这个样式就变成了主题.
一 样式定义
创建一个样式,在res/values目录中新建一个XML文件。这个XML文件可以随意命名,通常是styles.xml,这个XML文件的根节点必须是<resources>。然后新建<style>元素到在这个节点下,对于每个style你需要添加一个带有独一无二的name属性(这个属性是必须的)的。接着为每一个style下添加<item>元素,使用name属性(这个属性是必须的)声明样式特性,每个元素都需要添加android:命名空间作为前缀,标签中写下相应的值,这个值可以是字符串、十六进制的颜色值、对另一个资源类型的引用。如下:
<style name="TitleStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">@color/black</item>
<item name="android:layout_marginLeft">5dp</item>
<item name="android:layout_marginTop">5dp</item>
<item name="android:textSize">18sp</item>
</style>
二样式使用
在需要使用样式地方设置style属性为刚刚定义的属性样式
<TextView
style="@style/TitleStyle"
android:text="归属地查询" />
三样式继承
有两种方式来实现继承,一是通过style的parent属性,二是使用点号来定义
3.1 在定义style标签的时候,可以添加一个parent属性,指定一个父样式.如下,这边的apptheme样式继承了appbasetheme样式
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- 隐藏标题栏 -->
<item name="android:windowNoTitle">true</item>
</style>
<!-- Application theme. -->
<style name="AppTheme.AppBaseTheme">
<!-- 隐藏标题栏 -->
<item name="android:windowNoTitle">true</item>
</style>
注意:在利用点号定义样式的时候,应用的样式的要写上该样式的全名,AppTheme.AppBaseTheme,不能使用简单名字
AppTheme.
四主题
如果要使整个apk或者activity风格统一,这时候就需要用到主题了.为了给你的应用中的所有Activity设置一个主题,你需要打开AndroidManifest.xml文件,然后编辑<application>标签,写上android:theme属性,用样式名作为它的值.如
<application
android:theme="@style/AppTheme" >
<activity
android:theme="@style/AppTheme" >
这是使用自定义的样式,安卓系统本身就给我们提供了很多样式.如Theme.Dialog、Theme.Translucent.这时候写法要注意使用@android:style,表示引用系统资源.
<activity android:theme="@android:style/Theme.Dialog">