逆腹式呼吸:航海主题制作

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 06:45:36

航海主题制作

一、简介

航海桌面主题是一套灵活可自定义程度很高的系统。用户可以通过主题配置文件修改桌面内容,布局和插入动画,互动内容,制作个性化的桌面。

二、主题配置文件构成

主题配置文件是一个zip文件包,可以通过任何zip文件生成工具打包制作。然后修改扩展名为“.v”。将配置文件上传到手机以下任一位置就可以被桌面设置程序里的主题设置识别出来。

c:\System\Apps\HDesktop_0×2001E8B2\theme_pkg\

c:\Hanghai\

e:\Hanghai\

c:\vApps\

e:\vApps\

一个主题配置文件必须含有以下文件

  • meta.xml
  • theme.xml
  • prev.jpg

A、meta.xml是描述主题信息,里面包含版号和主题名称。

例: 0.0.7经典风格

B、theme.xml是主题定义,具体内容后面介绍

C、prev.jpg是主题预览图,在设置的时候显示。预览图可以适配不同分辨率。比如命名成prev_320_240.jpg,就是在320×240分辨率下使用。可以有多个预览图存在。

三、定义主题

基本内容

A.在theme.xml里可以定义主题。

a.根节点称为theme_pack,含有多个theme标签。桌面运行的时候会根据theme里的res属性选择适合当前屏幕大小的主题。

下面是同时定义了240×320屏幕和其横屏情况下320×240的主题。

例:

B.theme里有skin,wallpaper,color,flag,statuspane属性。

skin属性指定了当前皮肤图片。 wallpaper指定了默认壁纸,如果用户没设置过壁纸就采用这个壁纸。 color指定了壁纸采用的文字颜色,可以设置获得焦点后和未获得焦点的文字颜色,这会强制覆盖系统当前的颜色。 flag属性里目前只有一个值 nosep,隐藏每行内容之间的分割线。statuspane属性是用来选择symbian系统状态栏。可以是idle,flat,usual,empty。默认是empty。就是不显示系统状态栏。

C.theme里包含各种plugin。

plugin里最重要的属性是com,它指定了桌面将创建哪个组件。

下面是可用的组件名称

  1. hd_placeholder
  2. hd_status
  3. hd_digitalclock
  4. hd_analogclock
  5. hd_clock
  6. hd_weather
  7. hd_large_weather_icon
  8. hd_news
  9. hd_sns
  10. hd_music
  11. hd_luna
  12. hd_search
  13. hd_todo
  14. hd_calendar
  15. hd_dock
  16. hd_shortcut

plugin里除了com属性还能放pos,size,bg,flag属性,在使用某些com值的情况下还有特殊的属性可以支持。

pos属性是定义了plugin的位置,这在插件作为绝对坐标对齐的时候生效,如果插件不是绝对坐标对齐的,这个属性不生效。

size指定了插件的大小,在任何时候生效。可以通过*号表示服从默认大小设置。

例:size=”*,32″表示宽度默认,高度32。

bg属性指定了plugin的背景内容,里面是一条绘制语句。在后面有专门介绍。

flag是控制符。每种plugin都有默认的flag。一旦写了flag,就会覆盖默认值。

例:hd_clock的默认flag是可获得焦点,可以通过修改flag让他不能获得焦点 。这样用户操作键盘的时候就无法对焦到这个plugin上。

flag是有以下值组成的字符串:nav、abs、bottom。
nav表示可以获得焦点;abs表示绝对坐标对齐;bottom表示从底部开始排版;这些值组成用空格分割,达到最终效果。

例:flag=”nav abs”表示可获得焦点的绝对坐标对齐 flag=”nav bottom”表示可获得焦点的底部对齐
flag=“”,那么表示不可获得焦点,向上排版对其。

背景

背景是由各种绘图语句构成的,用来指定plugin背景内容。
最简单的方式是在plugin的bg属性里指定一个背景。

例:比如
这里指定了一个box背景,从主题的skin文件里读取一个矩形绘制,以box方式绘制到plugin的背景上。
也可以多个背景叠加。

另例:


……

采用background标签的方式,给plugin指定了2个背景内容。
注意,这里有个type属性。
type=”focus”表示这个背景在获得焦点时候生效。
一个plugin可以拥有两个背景,一个在无焦点时候生效,一个在获得焦点时候生效。唯一的列外是hd_shortcut。它的焦点背景只给图标用。而不是整个plugin。

背景绘图语句有以下几种:

box:outer_rect;inner_rect

row:outer_rect;inner_rect

row_top:outer_rect;inner_rect

row_bottom:outer_rect;inner_rect

col:outer_rect;inner_recct

col_left:outer_rect;inner_rect

col_right:outer_rect;inner_rect

_fill:rect

:rect

img:<(x,y)>image_path

box是九宫格绘制方法。根据outer_rect和inner_rect划定的两个矩形确立一个九宫格。缩放到plugin的背景区域上。九宫格的4个角不会被缩放。剩下5个格子,左右两侧的会上下拉升,上下两条会左右拉升。中间的区域是向四个角拉升。这种方式适合大多数需要指定圆角背景的情况。而且原始图片可以不是很大。
row,col是类似与九宫格的方式,不过他们值确定3个格子。两头不缩放,中间缩放。row是横向的缩放,col是纵向的缩放。他们可以指定各种功能对齐方法。比如top,bottom,left,right,当背景图片的大小不大于背景区域时候,会用这些方法对齐。
_fill就是填充,将皮肤中的一个区域拉升填充到背景。
空表示直接绘制一个皮肤里的内容。不做任何拉升操作。
img指定了一个外部图片做背景。 里面写的是图片文件的名称。在名称前面可以加一个园括号,加入偏移量。这样能指定他在plugin里的那个位置显示。
通过背景和hd_placeholder组合可以绘制很复杂的背景

例:下面这段代码定义了htc风格的大时钟

外部文件寻址

前面用到了各种图片,theme里的skin、wallpaper,背景里的img。他们都遵循同样的外部文件寻址。

外部文件寻址有以下几种情况

  1. 只有文件名,无路径
  2. 有完整的文件名和路径
  3. url

只有文件名的情况,是在主题配置文件里寻找。主题配置文件是个zip包,可以包含多个文件。相当于一个目录。可以将各种图片都打包到主题配置文件里。

有完整文件名和路径的时候直接按完整文件名与路径寻找。

url是种特殊的情况。目前不支持从网络下载文件。只支持file://和jar://。file://实际上就是把完整路径写成url。用途不大。jar:// 比较复杂,只是航海家内部使用。

特殊的plugin定义

有些特殊的plugin需要很复杂的定义才能完整工作。

hd_status

这是航海家风格的状态栏,里面可以定义各种组件,以及他们的对其方式

决定了对其方式,可以左对齐,居中对齐,右对齐。里面可以放各种指示信号。

可以放的indicator列表:

signal 信号

battery 电量

profile 情景模式

network 网络

date 日期

week 星期

clock 时钟

wifi wifi信号

bt 蓝牙

earphone 耳机

title 网标

armory 小徽章

alarm 闹钟

misscall 未接来电

sms 未读短信

email 未读电子邮件

usb usb插口

QQ qq占位符,如果qq启动了会空出这个位置让给qq的图标

hd_digitalclock

例:数字中定义继承与以前的航海风格大时钟。下面是一个不可获得焦点的数字时钟

数字钟在clock标签里定义,skin指定了时钟使用的皮肤文件。

header部分定义了各种元素在皮肤里的位置。主要是数字位置,因为大时钟的数字都是用图片绘制的。也能定义am和pm需要的图标。

body里定义了时钟有哪几部分。

最常用的是hour和min,这是小时和分钟。am_pm是用来显示上午下午,不过如果用户没开12小时时间格式是不会显示的。其他还有显示日期的date,农历的lunar,星期week,以及一个绘制命令draw。

date,lunar,week都是文本字段,可以指定color,align。color是一个rgb值,格式是red,green,blue。

例:200,100,100。

align可以是left,right,center里的任一一种。

date是有一个属性format,可以定义各种格式的时间,而不是单单显示日期。这个内容很繁杂,别处再说。

draw类似前面的背景绘制命令。将时钟皮肤里的一个区域绘制到一处。

例:,不过不负责缩放。

hd_analogclock

模拟钟一定要指定size大小,还要指定轴axis的偏移量。之后需要指定时针和分针。
指定时针和分针的时候要指定两个半径,内圈半径和轴半径。内圈半径是指针图片中间空白部分的半径。轴半径是指定了指针那个位置对应了轴。具体参考hour.png和min.png。

例:下面是一个模拟钟定义

hd_cba

这是绘制左右软键的plugin。它的特殊之处在于有一个color属性可以指定文字颜色。除了RGB值,可以写transparent作为值,这样会隐藏左右软键,但是仍然占据位置。这时候可以通过背景属性设置写图标作为左右软键的内容。

hd_large_weather_icon

这是模仿htc风格天气的组件。但是他实际上可以定制出任何组合的天气显示。这个组件里面可以插入控件。一共有三种控件,text,image,ani。下面是个范例

例:

ctrl就是插入的控件,rect表示位置,相对于plugin的左上角的坐标。 text控件有align属性,可以指定文本对齐方式。image控件有src属性指定图片。这里可以指定航海家的xml图标文件。通过imgid属性指定默认的图标id。

ctrl的控件可以指定id。id是个很特殊的东西。特定的id是有特定的含义。plugin会寻找这些有特定id的ctrl并修改里面的值。像这里的weathericon,就会被修改成当前天气图标。city会被修改成城市。date会被修改成日期。temp是温度,condition是当前天气文本。这可以理解成一种协议。用户编辑文本修改表现形式。桌面通过id寻找对应的位置写入信息。