android移动应用开发任务驱动教程:android 9.0+android studio 3.2
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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主题。