25.3. 定制主题

在介绍定制主题前,我们先来看下Operamasks的主题使用机制。Operamasks的最终渲染结果是使用CSS层叠样式表来定义展现效果的。观察任意一个OperaMasks3.2渲染页面的源代码, 我们可以在<head>部分看到类似这样的代码:

       <link class="x-skin" rel="stylesheet" type="text/css" href="/bpdemos/_global/resource/ext/resources/css/ext-all.css"/>
       <link class="x-skin" rel="stylesheet" type="text/css" href="/bpdemos/_global/resource/om/resources/skin/default/css/om-ext-all.css"/>

如果应用本文第2节介绍的方法设置页面的当前主题为gray,则在上述两个<link>标签下面我们还能看到一个<link>标签。

       <link class="x-skin" rel="stylesheet" type="text/css" href="/bpdemos/_global/resource/ext/skin/gray/yuiext/css/xtheme-gray.css"/>

Operamasks将gray主题的<link>标签放在引入默认风格的<link>标签之后,从而保证gray主题覆盖默认主题。应该注意的是,这里引入的是应用部署后创建的样式表副本。 原始文件在operamasks-comp.jar的META-INF\ resource\ ext\ skin\ default\ yuiext\ css\与META-INF\ resource\ ext\ skin\ gray\ yuiext\ css\目录下。 通过观察这些主题文件,可以对Operamasks中主题的使用有一个整体印象(例如命名规则,默认标签风格等)。在实际应用中,用户常常需要对这些主题进行简单的修改和扩展,但由于这些主题资源是Operamasks发行包的一部分,所以用户不应该直接修改这些文件,否则随着Operamasks版本的更新,用户所作的修改会被覆盖。

因此,用户可以自己定义一套主题,主题资源配置完成后,按照如下目录结构进行放置.

       META-INF
       -----resoure
       ----------ext
       -------------skin
       ----------------greenskin
       -------------------yuiext
       ----------------------css
       -------------------------xtheme-greenskin.css
       ----------------------images
       ----------skins.xml

然后配置skins.xml文件。skins.xml的内容如下:

       <skins>         
           <skin id="greenskin" file="ext/skin/greenskin/yuiext/css/xtheme-greenskin.css">
           <displayName><![CDATA[Greenskin]]></displayName>
           <displayName locale="zh_CN"><![CDATA[Greenskin]]></displayName>
           <authorName><![CDATA[Ext JS - JavaScript Library]]></authorName>  
           <authorEmail><![CDATA[jack.slocum@yahoo.com]]></authorEmail>
           </skin>
             ......
       </skins>

最后将主题资源打成Jar包放在应用的lib目录下即可。下面将以一个简单的例子来说明主题的定制过程。这里我们需要借助于FireFox的插件FireBug来获取页面元素的class属性值。 我们的需求是修改TabLayout的展示风格。

修改前

图 25.8. 修改前


修改后

图 25.9. 修改后


首先,使用FireBug的Inspect(查看)功能,找到tab页签条的样式。

图 25.10.


在FireBug中可以看到这个元素的CSS样式。

图 25.11.


上图右边的Style窗口中可以看到所有影响当前元素并且已作定义的class,以及样式定义之间的覆盖关系。找到ul.x-tab-strip-bottom,由于我们希望改变tab页签条的背景,所以需要修改background属性。

图 25.12.


接着编写新主题的样式文件xtheme-greenskin.css。

       ul.x-tab-strip-bottom{
       background-image:url(../../images/ext/green/tabs/tab-strip-btm-bg.gif);
       border-color:#91ceb9;
     }

然后配置skin.xml,配置内容在上文中已经介绍了。最后将所有的主题资源打包放入应用的lib目录下。

应用本章第2节介绍的方法,修改页面主题为Greenskin。重启应用,再来查看该元素css样式的加载情况。

图 25.13.


由上图可以看到xtheme-greenskin.css被加载,tab页签条达到预期效果,新主题定制成功。