Chinaunix首页 | 论坛 | 博客
  • 博客访问: 23274
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 155
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-27 17:14
个人简介

博客开通

文章分类

全部博文(16)

文章存档

2014年(16)

我的朋友
XUL

分类: 其他平台

2014-08-09 15:26:02

概述

XUL概览

XUL是一种基于XML的语言,是为mozilla浏览器的GUI标记语言而开发的。结合HTML和脚本语言去开发用户界面的早期实验经历了很长一个过程,可以认为XUL是这个过程的演化结果。用在windows vista中的XAML也经历了相似的过程,在adobe flash中使用的FLEX也一样。与显示平台无关的网页相似,用XUL标记的应用程序在任何运行了Firefox的环境中都能够同样的运行。
由于HTML原本是作为一种标记文档、指定网页的语言,它不可避免的缺少用于标记应用程序的功能。然而,XUL则是在已经成熟的标记语言的基础上用于描述用户界面的语言,插入带有复杂特性的UI组件是可能的,并且只需要写一下标签而不需要任何特殊的脚本。
与那些由W3C这样的标准化组织标准化的正式技术规范的语言不同,XUL当前还没有一个明确的技术规范。最新的XUL技术规范请参见MDC上的XUL参考手册以及mozilla wiki上的XUL页面。
本章中解释的每一个元素,都有一个带有源代码的例子。你可以你可以输入这些例子并在Firefox中打开它们来看看它们有什么样的行为及是怎样展现的。

显示XUL的方法

XUL似乎是mozilla应用程序(如Firefox、thunderbird以及它们的扩展)中专有的,但是其他基于gecko引擎的网页浏览器、甚至基于网页的内容也有使用XUL的。例如,有一个辅助在amazon上购物的,以及用来编写并显示幻灯片的工具。
要试验本章中的示例代码,将它们保存为.xul为后缀的文件并将其拖到Firefox浏览器窗口中即可。(译注:Firefox较高版本不支持这种方式,要这样测试可用使用早期版本的Firefox。如firefox3.6).
如果我们想要Firefox运行的过程中不显示任何Firefox本身的GUI而只显示某个XUL文件的内容,我们可用运行Firefox并设置选项-chrome file_URL.XUL。
另一种方法,如清单1所示,使用window.openDialog()方法,这只能用在XUL窗口中。这是用于扩展来打开独立窗口的。
清单1:打开一个没有Firefox固有GUI的Firefox窗口

[javascript] view plaincopyprint?
  1. window.openDialog('another.xul''_blank','chrome,all,dialog=no');  


XUL作为一个XML应用程序

清单2展示了一个由XUL(一个XUL文档)标记定义GUI的文件例子。在XUL中,根元素一般是window元素。其名字空间是:

如果字符编码是UTF-8,编码的指定和XML声明都可以省略。但是本章中的例子都将它们包含进来了。
因为一个XUL文档也是一个XML文档,它可以包含XHTML,SVG、MathML,以及其他元素;如果你使用外部的实体参考,XML文档的内容都是模块化的;联合使用其他与XML相关的技术如DOM,XLink,或XSLT,你可以在很多不同的应用程序中使用它。
清单2:XUL文档的一般结构

  1. xml version="1.0" encoding="UTF-8"?>  
  2. xml-stylesheet href="chrome://global/skin/"?>  
  3. <window xmlns="">  
  4.   
  5. window>  

即使在Firefox和扩展的国际版中,也使用了这种XML功能。


读取样式表

XUL使用CSS来指定其原始的外观。因为XUL也是一种XML,读入样式表使用xml-stylesheet处理指令。
在清单2的第二行,我们在读入主题的标准样式表。通过chrome://global/skin/指向一个特殊的样式表,我们就可以使标签和按钮尺寸,窗口背景色等等与当前Firefox选择的主题相匹配。我们也可以读入一个我们自己设置的样式表。

XUL的box模型

原则上,XUL联合使用两类box:水平box和垂直box,对所有的UI组件进行布局。如清单3所示,可以使用hbox来将元素水平的布局,也可以使用vbox来将元素进行垂直的布局。当这个文件在Firefox中打开的时候,显示如图1所示。
清单3:水平和竖直box

  1. <label value="Horizontal layout"/>  
  2. <hbox>  
  3. <button label="horizontal1"/>  
  4. <button label="horizontal2"/>  
  5. hbox>  
  6. <label value="Vertical layout"/>  
  7. <vbox>  
  8. <button label="vertical1"/>  
  9. <button label="vertical2"/>  
  10. vbox>  
  11. <label value="mixed"/>  
  12. <hbox>  
  13. <button label="mixed1"/>  
  14. <vbox>  
  15. <button label="mixed2"/>  
  16. <button label="mixed3"/>  
  17. vbox>  
  18. <button label="mixed4"/>  
  19. hbox>  

图1:清单3的输出

还有一个grid元素,可以用于进行相似的布局,也可以使用HTML的table元素,stack元素来对其他元素进行布局,等等。所有在屏幕上显示的微件都是使用这些box来布局的,这使得复杂接口的设计成为可能。
 


共有属性

在看各种接口对象之前,我们来看看他们中的一些共同属性,特别是那些经常使用的属性。
Id和class
属性id和 class与XHTML中的功能相同。id是用来定义一个元素的唯一标识名称的,class是用来为元素分类的;这两个都为CSS和javascript提供了引用元素的方便的途径。也有特殊类型的元素只在别的元素引用的时候才会显示出来。
orient
一个box中的内容是竖直还是水平排列的取决于这些元素的初始状态。你可以使用orient属性来设置或者改变这一布局方式,orient的选项是horizontal和vertical。
align和pack
align和pack属性都是指定box中元素布局的。他们的值可以是start(上边或者左边),center,end(下边或右边),或者stretch(将元素扩展到最大以匹配其所在的元素)。
align属性定义为与orient属性相垂直的方向,而pack属性与orient属性的操作方向一致。图2展示了分别为两个元素设置align="center" pack="start"的时候结果的不同。
清单4:align与pack与orient的关系

  1. <box flex="1" align="end" pack="end">  
  2. <button label="Happy"/>  
  3. <button label="Sad"/>  
  4. box>  

图2:清单4的输出


align: 上 中 下  star,center,end  拉伸 stretch
pack:左 中 右  star,center,end  拉伸 stretch

flex
 
一般的,元素都有修正的高和宽。属性flex说明了一个元素应该扩展以占据一个窗口的高度和宽度的比例。
flex的值是一个正整数,表示在父元素的orient属性方向上的增长倍数。例如,flex=“1”表示这个元素应扩展以适合其orient方向;如果有两个flex=“1”的元素在同一行,他们就会变化相同的尺寸。你也可以设置flex=“2”(或者更高的数值)作为元素的尺寸倍数。在清单5中第二个标签将会显示成第一个的两倍(图3)。
清单5:随着flex增长

  1. <hbox>  
  2. <label value="label1" flex="1" style="border: 1px solid;"/>  
  3. <label value="label2" flex="2" style="border: 1px solid;"/>  
  4. hbox>  

图3:清单5的输出

ordinal
 
在XUL的box中,元素通常会按照它们在代码中出现的顺序进行布局(从左到右或者从上到下)。使用ordinal属性可以改变它们的顺序。ordinal属性的值是正整数,用来为box的布局进行排序——在清单6中的例子,按钮会按照button3,button2,button1的顺序显示(图4)。
如果多个元素具有相同的ordinal值,就会按照它们在源代码中出现的相对顺序进行布局,ordinal默认的值是1.
清单6:使用ordinal改变顺序

  1. <vbox>  
  2. <button label="button1" ordinal="3"/>  
  3. <button label="button2" ordinal="2"/>  
  4. <button label="button3" ordinal="1"/>  
  5. vbox>  

图4:清单6的输出

box的尺寸
 
你可以用width和height属性为XUL元素准确的设置尺寸,如清单7所示。如果你创建的元素使用了flex属性可以变化,你也可以使用minwidth,minheight,maxwidth,maxheight等来设置最小和最大尺寸。这些都使用像素为单位。
清单7:设置按钮的尺寸

  1. <button label="Button" width="200" height="100"/>  

如清单8所示,你也可以使用style属性嵌入CSS到元素中,这样你就可以用其他的单位设置尺寸了。
清单8:使用CSS标记来设置按钮的尺寸

  1. <button label="Button" style="min-width: 10em;"/>  

hidden和collapsed
hidden和collapsed属性作为关闭元素显示的开关。
设置hidden=“true”可以禁用元素的显示。这与在CSS中设置display:none的效果是一样的。你可以使用这个来设置一个隐藏的或者不需要出现的状态,例如在右键菜单中不需要出现的菜单项。
设置collapsed=“true”可以将一个元素的高和宽设置为0,但是这个元素还是会被认为是存在的。这与在CSS中设置visibility:collapse的效果相同。使用这个可以将当前不使用的侧边栏“收起”。
disabled
当不是所有的元素都合适的时候,你可以使用disabled属性来暂时的禁用对一个元素的输入,这也是用户通常所做的,典型的,disabled=“true”的元素会显示成浅灰色或者透明的。
tooltiptext
使用tooltiptext属性可以在元素上显示一个简短的解释性工具提示。输入需要作为工具提示的文本作为这个属性的值。
persist
persist属性是一种在用户操作改变了XUL元元素状态之后存储其状态的简单方式。其他你想要存储的以空格隔开的属性名称组成一个ASCII字符串作为persist的参数。下次那个XUL文档打开的时候,保存的值就会自动的修复。设置的系统我们会在第四章中进行说明,使得保存简单的状态变得可行且不需要任何复杂的脚本。
注:这些值存储在localstore.rdf文件中,在用户profile里面。
为了让persist属性记录其他元素的状态,这些元素都必须设置id。

http://blog.csdn.net/z6482/article/details/7317898

XUL中可用的窗体部件

根元素

XUL文档使用不同的根元素来实现不同的目的。本节我们将会看到三种典型的根元素:window、page和dialog。
根元素使用windowtype属性作为这种类型的窗口的标识符。例如,Firefox使用navigator:browser作为其浏览器窗口的windowtype,使用Browser:Preference作为其选项窗口的windowtype。使用将会在第四章描述的方法,我们会看到是如何使用这些值来获取窗口的。
一个窗口在屏幕上的大小和位置可以使用width、height、screenX、screenY(单位都是像素)等属性来指定。使用前面描述的persist属性,你可以简单的存储一个窗口的尺寸和位置。Firefox也是使用这一方法来存储其窗口的尺寸和位置的。

常规根元素

window
至今为止在例子中出现的window元素是用来定义一个普通窗口的。这显示了用于Firefox浏览器窗口、书签管理器窗口一起很多其他窗口种类相同的窗口。一般的,你可以使用window元素作为你的根元素。
page
对于侧边栏以及其他在窗口框架内部打开的XUL文档,使用page元素作为根元素。除了与window元素的目的不同之外,其功能与window元素没有任何不同。

用于对话框窗口的根元素

dialog
创建选项对话框、确认对话框等的时候使用dialog元素。这个元素有很多属性,可以简单的显示控件(按钮,等等)这样的窗体小部件以及适应于任何所运行的平台的布局。
例如,windows将OK按钮放在左边而cancel按钮放在右边,而Mac OS X的布局方式却不一样。这就是Firefox本身使用在bookmark属性以及其他对话框中的方式。
对话框中使用的按钮
一个dialog元素会在其底部显示很多按钮,如表1所示,有4种类型的按钮可以显示,你可以将你想要显示的按钮名称作为逗号隔开的列表写在buttons属性之后。
表1:对话框窗口中可以显示的按钮类型

按钮名称

描述

accept

OK按钮

cancel

Cancel按钮

help

Help按钮

disclosure

提示三角或者按钮。这用来方便用户切换显示附加信息

另外,还有两个特殊的按钮,extra1和extra2.这两个按钮的标签使用buttonlabelextra1和buttonlabelextra2属性来进行设置,这些属性的值是任意的字符串。
当由事件处理器使用按钮名ondialog
阅读(513) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~