OperaMasks 如何使用自定义皮肤
2009-12-22 由 LCP 发表   评论(0条)   有2743人浏览

1. 概述

由于有了<w:chooseSkin>这个组件,在OperaMasks中切换皮肤是一件非常简单的事情。但是官方提供的皮肤毕竟有限, 当有了一套自己的皮肤的时候应该如何才能使用呢,换句话说如何才能让<w:chooseSkin>发现我这套皮肤呢,这些都是接下来要介绍的内容。

2. 如何获取皮肤

一套皮肤其实是由许许多多CSS文件和图片组成的,切换皮肤其实就是下载不同资源然后进行替换而已。要自己开发一套完整的皮肤并不是一件容易的事情, 因为这么多的组件使用到的CSS样式和图片少说也有上百种。好在Ext已经为我们提供了不少精美的皮肤。 我们可以上Ext的官网去下载。 下载的压缩包解压后应该包含两个目录:css和images。如下图:

Ext 皮肤包目录结构

Figure 1. Ext 皮肤包目录结构

3. 新建Java工程,导入资源

新建Java工程extSkin,按下图所示目录结构把皮肤资源导入META-INF目录下。新建skins.xml文件,把这个文件放在和skin文件夹在同一个目录下。需要注意的是把css和images目录拷贝到skin下之后,需要看看css文件里引用图片的路径是否和现在的路径一致。

皮肤资源导入工程后的目录结构

Figure 2. 皮肤资源导入工程后的目录结构


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

<?xml version="1.0" encoding="UTF-8"?>
<skins>
    <skin id="black" file="/ext2/skin/css/xtheme-black.css">
        <displayName><![CDATA[Black]]></displayName>
        <displayName locale="zh_CN"><![CDATA[Black]]></displayName>
        <authorName><![CDATA[Ext JS - JavaScript Library]]></authorName>
        <authorEmail><![CDATA[jack.slocum@yahoo.com]]></authorEmail>
    </skin>
    ... ...
</skins>

4. 导出jar包

最后将工程打成Jar包放在应用的lib目录下即可

测试页面代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML PUBLIC "" "">
<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
    xmlns:h="http://java.sun.com/jsf/html" xmlns:ajax="http://www.apusic.com/jsf/ajax"
    renderKitId="AJAX">
    <w:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </w:head>
    <w:page title="Insert title here">
        <layout:borderLayout fitToBody="true">
            <layout:panel title="North" region="north" height="70">
                <w:form>
                    <h:outputLabel value="Choose Skin: " style="font-weight:bold" />
                    <w:chooseSkin cookie="skin">
                        <ajax:action event="onchange" />
                    </w:chooseSkin>
                </w:form>
            </layout:panel>
            <layout:panel title="Center" region="center" style="height:100%;width:100%" split="true">
                <layout:tabLayout width="500" height="300" id="sTab" toolBarPosition="bottom">
                    <layout:panel title="Tab1">Tab1</layout:panel>
                    <layout:panel title="Tab2">Tab2</layout:panel>
                    <layout:panel title="Tab3">Tab3</layout:panel>
                </layout:tabLayout>
                <w:toolBar target="sTab" style="">
                    <w:button value="Submit" />
                </w:toolBar>
            </layout:panel>
            <layout:panel region="south" title="South" height="70">
                <p>This is South</p>
            </layout:panel>
            <layout:panel region="west" title="West" collapsible="true">
                <p>This is West</p>
            </layout:panel>
        </layout:borderLayout>
    </w:page>
</f:view>

测试效果图如下:

使用皮肤资源效果图:

Figure 3. 使用皮肤资源效果图:

5. 开发一套自己的皮肤

虽然说自己开发一套完整的皮肤需要花不少时间,但是借助一些工具和技巧,做起来还是可以得心应手的。 下面将以一个简单的例子来说明皮肤的制作过程。这里我们需要借助于FireFox的插件FireBug来获取页面元素的class属性值。 我们的需求是修改borderLayout的展示风格。

通过FireBug的Inspect(查看)功能可以发现borderLayout的header的样式是.x-panel-header,如下图:

.x-panel-header样式

Figure 4. .x-panel-header样式


修改background-image和border样式就可以达到我们的目的, 因此,先在extSkin的工程里面新建自己的样式mystyle.css和自己的图片目录mysyle:

新建自己的皮肤资源

Figure 5. 新建自己的皮肤资源


接着在mystyle.css中复写x-panel-header样式,并在images的mystyle文件夹中添加自己的背景图片,然后在skins.xml里加上:

  <skin id="mySkin" file="/ext2/skin/css/mystyle.css">
        <displayName><![CDATA[Mystyle]]></displayName>
        <displayName locale="zh_CN"><![CDATA[Mystyle]]></displayName>
        <authorName><![CDATA[Ext JS - JavaScript Library]]></authorName>
        <authorEmail><![CDATA[licongping@yahoo.com]]></authorEmail>
  </skin>

最后重新打包并放在应用的lib目录下,效果如下:

自定义皮肤展现效果图

Figure 6. 自定义皮肤展现效果图


我们还可以在mystyle.css里复写更多的样式,如x-panel-body可以设置panel的border样式,x-toolbar可以设置toolbar的背景图片等等。以此类推,我们就可以制作出自己的一套皮肤了。

所有评论
目前暂无评论
  共0页
您还没有登录,请登录后发表评论