1.7 Android应用程序的样式和主题设置
Android应用程序的样式设置包括样式定义、设置单个控件样式、全局样式设置、样式继承关系等。
1.样式定义
Android的样式定义在res/values/styles.xml文件中,类似Web网页中将样式定义在某个CSS文件中,但Android的styles.xml是自动加载的,不需要手动import或link。
如下所示的代码是一组样式的定义:
<resources> <! -- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <! -- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>
Android的样式定义是通过<style>标签完成的,通过添加item元素设置不同的属性值。
2.设置单个控件样式
对于TextView,样式设置的代码如下:
<TextView android:text="OK" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18px" android:textColor="#0000CC" />
也可以引用前面定义的样式,代码如下:
<TextView android:text="OK" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/DefaultStyle" />
可通过设置控件的style属性进行样式调用,推荐使用此种方式将样式和布局分离。
3.全局样式设置
在Web前端编程中,可以使用CSS样式文件设置全局的样式,也可以设置单个标签的样式。Android中我们同样可以办到,只是这种全局样式被称作主题theme。例如,对于整个应用默认字体都要18px,颜色为#0000CC,背景色为#F2F2F2,我们可以通过在AndroidManifest.xml中设置<application>的android:theme属性来完成,代码如下:
android:theme="@style/AppTheme"
引用主题样式使用android:theme,主题的设置也可以在代码中通过setTheme(R.id.xx)完成。
4.样式继承关系
Android的样式采取和CSS中一样的覆盖、继承原则,这与面向对象的子类覆盖父类属性、继承没有定义的父类属性值的原则是一样的。
如果一个TextView自己设置了样式,它的ViewGroup设置了样式,activity设置了主题,application设置了主题,那么它会先读取自己样式的值,对于自己没有的样式则向上查找,第一个找到的值即为要采取的值。依次读取的顺序为View自己的样式→上一层ViewGroup的属性值→上上层ViewGroup的属性值→…→activity主题→activity主题。