尽管 Android 系统提供了很多样式和主题,但有时这些效果并不能实现特殊的效果或者风格,此时就可以自定义样式和主题。定义样式和主题的步骤如下:

(1) 在 res/values 目录下创建一个样式文件 style.xml (文件名字可以自定义),添加一个  <resources> 根结点。

(2)在<resources>结点中添加一个<style>节点,并在该节点中为样式或主题定义一个唯一的名字,也可以选择增加一个父类属性,表示当前风格继承父类的风格。  

(3)在<style>节点中声明一个或多个<item>,每个<item>节点需要定义一个属性名,并在元素内部设置这个属性的值。

    为了让初学者更好地学习,接下来通过一个具体的案例来演示如何自定义样式和主题。具体步骤如下:

1. 创建样式和主题

    创建一个名为 “Style” 的应用程序,将包名修改为 cn.itcast.style。在 res/ values 目录中添加一个用于定义样式的文件,名为 mystyle.xml(文件名必须小写),具体如图1 所示。

Android创建window Android创建样式_android

              图 1  mystyle.xml

    mystyle.xml 文件中定义的样式和主题,具体如下所示:



<resources>
    <style name="TextStyle">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textSize">30dip</item>
        <item name="android:textColor">#990033</item>
    </style>
    <style name="MyTheme">
        <item name="android:background">#D9D9D9</item>
    </style>
</resources>



    上述代码在 <style name="TextStyle">节点中设置了一个样式,定义了控件宽度和高度为wrap_content 显示全部内容,字体大小为 30dip,字体颜色为红色。<style name="MyTheme"> 结点用于设置 Activity 背景色为灰色。

2. 使用自定义样式和主题

    在 activity_main.xml 的<TextView>控件中,通过 style="@style/TextStyle"引入定义好的样式,具体代码如下所示:



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        style="@style/TextStyle"
        android:layout_centerInParent="true"
        android:text="自定义样式" />
</RelativeLayout>



   在 AndroidManifest.xml 的<activity>节点中,通过 android:theme="@style/MyTheme"引入定义好的主题,具体代码如下所示:



<activity
      android:name="cn.itcast.style.MainActivity"
      android:theme="@style/MyTheme"
      android:label="@string/app_name" >
      <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
</activity>



     上述代码中,就是将定义好的主题运用于当前 Activity 之中。接下来运行当前程序,结果如图2 所示。




Android创建window Android创建样式_移动开发_02

            图 2   自定义样式和主题



     从图2 可以看出,整个 Activity的背景是灰色,这个就是 android:theme="@style/MyTheme"主题的作用。布局中没有对 TextView 定义高度、宽度以及字体颜色,但该 TextView 依然正常显示并且字体颜色变成了红色,这就是 style="@style/TextStyle"样式的作用。



 



 



继承其他样式

    自定义的样式还可以通过 parent 函数继承其他已经定义好的样式,使程序的扩展性更好,具体代码如下所示:



<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyStyle">
        <item name="android:textSize">30dip</item>
        <item name="android:textColor">#990033</item>
    </style>
    <style name="TextStyle" parent="MyStyle">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>
</resources>



     上述代码中,MyStyle定义了字体的大小颜色,TextStyle中通过 parent 函数继承 MyStyle 中的属性,这种方法设置样式的效果与图2是一样的。