小米主题xml编码高级教程Word格式.docx
《小米主题xml编码高级教程Word格式.docx》由会员分享,可在线阅读,更多相关《小米主题xml编码高级教程Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
5.需要灵活更换皮肤风格,并且界面动画和交互动画甚至部分交互方式都可以通过皮肤更换。
无需更改应用程序。
比如一些简单的工具类应用程序、无输入的操作界面希望能更换操作模式和桌面小工具可以考虑使用,也可以作为一个动画框架实现类似电子贺卡的界面,可支持交互,做为应用程序中的彩蛋 ?
MIUI主题使用MORE的模块 百变锁屏桌面时钟相框小工具闹钟响铃界面 自桌面动态小部件百变壁纸动态图标 天气小工具_2x4_custom(v4) MAML在百变锁屏中的应用 百变锁屏在主题包里的lockscreen/advance目录下,文件是描述脚本 … frameRate:
指定帧率,如果动画缓慢,可以指定小一点的值,省电。
默认为30。
displayDesktop:
默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher或者是锁屏前的应用程序。
可以完美实现WP7,Meego,阿里云等的解锁界面。
showSysWallpaper:
默认为false,是否在锁屏界面显示桌面壁纸。
开启后如果没有指定锁屏壁纸,会将桌面壁纸作为锁屏的壁纸。
screenWidth:
设定屏幕宽度标准。
如果指定为720,锁屏中所有元素的位置都按720p的布局编写,480p的手机会自动进行缩放。
MAML在百变壁纸及动态图标中的应用 ?
百变壁纸 百变壁纸在主题包的miwallpaper目录下,描述文件也是。
根节点表示与百变锁屏基本一致:
… width:
表示百变壁纸的宽度。
height:
表示高度 另外,如果要实现元素跟随手指滑动的效果,需要借助#wallpaper_offset_pixel_x,#wallpaper_offset_x ?
wallpaper_offset_pixel_x:
偏移的像素数wallpaper_offset_x:
偏移百分比 二者关系:
#wallpaper_offset_x*屏宽=-1*#wallpaper_offset_pixel_x 滑动时:
在第一屏,wallpaper_offset_pixel_x=0,wallpaper_offset_x=0;
滑到最后一屏,wallpaper_offset_pixel_x=-1*屏宽,wallpaper_offset_x= 为了适配不同分辨率机型,建议使用#wallpaper_offset_x。
建议的设计方式:
1.2.3. ?
壁纸切成双屏宽壁纸定位:
x=\屏宽\ 需要跟随滑动的元素定位:
x=\屏宽+相对壁纸的位置\ 动态图标 动态图标在主题包icons\\fancy_icons\\目录下,每个动态图标是一个文件夹,文件夹的名字是对应的app包名。
例如日历的动态图标是一个叫\的文件夹,里面包含描述文件 … hideApplicationMessage:
默认false,屏蔽右上角的通知标志。
useVariableUpdater:
指定需要哪些系统变量,目前包括电量和时间,而且可以指定时间的更新周期,如果时间小工具每秒更新一次,需要指定更新周期为1秒,否则默认会每分钟更新一次。
如果小工具或动态图标只显示日期,则每天更新一次,可以指定更新周期为1天。
尽量选择较长的更新周期,以节约系统资源。
目前支持的tag:
Battery,,,, 如果某个小工具不需要电量或时间变量,则需要使用useVariableUpdater=\,指定不做时间变量等更新。
如果某个小工具显示系统电量并且显示根据时间每小时更换背景图片:
useVariableUpdater=\如果需要每秒进行多次刷新,可以直接使用frameRate 壁纸元素 Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和Image元素相同,可以有动画和其他属性控制。
如果没有此元素则不显示壁纸。
可以有多个。
例子:
变量 变量 ?
name变量名 expression变量对应的表达式或常量注意:
如果定义字符串常量需要多一套单引号:
expression=\type=number/string定义数值变量或字符串变量默认:
number const=true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。
如果变量值会在锁屏运行期间改变,const设为false默认:
false threshold阈值触发,当变量值的变化超过设定的阈值时,可以触发一些命令。
例如:
上述代码表示#time3的值每变化1,就会执行里面的所有命令 ?
persist默认false,变量持久化。
指定为ture后,如果没有重新给定该变量其他的值,那么这个值会一直保存,无论解锁后重新锁定或者重新应用主题都不会还原 变量数组
变量数组 Item数组元素定义expression元素对应的表达式 value如果元素是常量,则用value指定常量值 ?
//定义了一个每隔两秒轮换一次日期显示格式的DateTime元素.//数组元素可以用来根据数字变量值显示不同的字符串 //显示英文月份 全局变量 unlocker:
touch:
_x解锁部件在x方向的偏移_y解锁部件在y方向的偏移_dist解锁部件移动的距离 解锁部件的状态:
0normal,1pressed,2reached ?
time:
touch_x当前触摸点的x坐标touch_y touch_begin_x按下屏幕时的初始x坐标touch_begin_y touch_begin_time按下屏幕时的时间 ?
time当前时间,longtime_sys系统时间毫秒数year年份 ?
农历 month月份date日期 day_of_week星期hour12当前小时hour2424小时制minute分钟second秒 ampm上下午0:
am1:
pmtime_format0:
12h1:
24h ?
battery:
year_lunar农历年份 year_lunar1864用来计算天干地支month_lunar农历月份从1开始计month_lunar_leap0/1是否润月date_lunar农历日期从1开始计 ?
screen:
battery_level当前电量,1~100 battery_state0正常1充电2电量低3已充满 ?
image:
screen_width屏幕宽度screen_height屏幕高度 raw_screen_width物理宽度raw_screen_height物理高度 ?
music:
_w图片实际宽度_h _width图片文件的宽度 _height ?
others:
music__state0暂停1播放 ?
sms_unread_count未读短信数call_missed_count未接电话数@next_alarm_time下一个闹钟时间 intercept_sys_touch是否截获以后的触摸事件,避免被其他View捕获,例如在自桌面widget中可以防止在widget上进行触摸操作时桌面滚动和进入编辑模式frame_rate当前屏幕帧率volume_type 0通话音量1系统音量2电话铃声,短信铃声3音乐播放器音量4闹钟音量5通知音量6连接蓝牙时的通话音量7在某些国家强制的系统音量8DTMF音量9TTS音量10FM音量 ?
ring_mode0silent,1vibrate,2normal wifi_state0disabled,1enabled,2problem,3half(intermediate)bluetooth_state0off,1on,2halfdata_state0off,1on usb_mode0disconnected,1chargeonly,2storage,3intermediate 表达式 支持加减乘除取模括号和函数加减乘除取模:
+-*/% 支持函数:
sin,cos,tan,asin,acos,atan,sinh,cosh,sqrt,abs,min,max不解释 ?
len(数字)给定数字位数len(1234)=4 digit(数字,第几位)取给定数字的第几位digit(12345,2)=4注意:
下标从右向左,并且从1开始substr(原字符串,字串开始位置,字串长度)substr(‘今天真热’,1,2)=‘天真’round()四舍五入取整int()向下取整eq(x,y)//x==y?
1:
0ne(x,y)//x!
=y?
0ge(x,y)//x>
0gt(x,y)//x>
y?
0le(x,y)//x lt(x,y)//xisnull(x)//x==null?
0//是否表达式包含空变量,通常用于判断绑定的变量是否查到数据not(x)x>
0?
0:
1ifelse(x,y,z)//x>
y:
zifelse(x1,y1,x2,y2,...,z) ifx1>
0returny1;
elseifx2>
0returny2;
...;
elsereturnz +可以拼接字符串,一些函数也可以支持字符串,isnull可以判断字符串变量是否为空,ifelse可以选择字符串,字符串比较函数eqs(@string1,@string2) 元素可见性支持表达式visibility=“表达式”0可见Image,Text,Time的属性 align=left,center,right坐标点水平对齐方式alignV=top,center,bottom坐标点垂直对齐方式 文本 显示指定格式的文字,坐标属性支持变量 ?
color:
文字颜色,#FFFFFFsize:
文字大小 format:
如果需要在文字中显示变量数字,需要指定格式,用%d指定数字位置 paras:
如果指定了format,需要在paras里指定%d对应的变量表达式,可以有多个变量表达式用\隔开align:
left,center,right,文字坐标的对齐方式 textExp:
文字表达式,可以直接调用变量等如想要输出“现在时间是9点”,可以写成textExp=\现在时间是’+#hour12+’点’\ width文字宽度,当文字超过指定宽度时会被切掉。
如果指定了多行显示,则会折行显示。
如果指定了文字滚动,则会在指定的位置滚动显示文字 marqueeSpeed文字滚动速度,配合上面的宽度使用 marqueeGap滚动间隔。
当文字显示完后再次出现的间隔,默认为四个汉字的宽度 rotation旋转角度,旧的angle也可以使用,不过建议用rotation,因为比较高端大气国际化multiLineture/false是否支持多行显示,默认falsespacingMult行距倍数默认1spacingAdd行距增加量默认0 _width某行文本的宽度,可以用来排版 实例用法:
显示下一个闹钟时间 textExp属性支持字符串表达式:
*天气信息,如果温度为空显示--非空显示数值 textExp=\℃’\ 时间
src表示时间图片的前缀,如下表示使用time_,time_,...time_,time_坐标属性支持变量表达式space表示时间图片的间隙,我们可以使用这个功能来对时间图片进行排版,使用正值时图片间距变大,这时可以将图片切小,节省内存。
对于有投影的图片,将space写成负值,可以使投影重叠以节省空间 日期 显示指定格式的日期 format:
支持标准日期格式,另外增加农历:
NNNN 九月:
M->
9 MM->
09 ?
m->
7mm->
07 7分钟:
mmm->
007mmmm->
0007 ?
1970年4月6日3:
23am \\月d日h:
mmaa\月6日3:
23am\ ?
星期 \周三\\星期三\ \纪念日:
M/d\纪念日:
4/6\ ?
24小时:
\ 图片 图片部件用来在锁屏界面上显示一个图片,可以指定各种属性 x,y相对于屏幕左上角的坐标w,h宽和高 pivotX,pivotY旋转中心rotation旋转角度,一周360度src图片名称 srcid图片序列后缀数字,一般用变量表示,可以根据变量显示不同的图片,如果src=\则最后会显示图片\ ?
alpha透明度0-255,小于等于0不显示 antiAliastrue/false抗锯齿,如果为true图片在变形旋转时不会有锯齿,但是速度会慢srcExp图片源表达式srcFormat图片源格式srcForamtExp图片源格式表达式srcParas图片源参数 align/alignV对齐方式,上文已经介绍。
例子:
//srcExp:
图片源表达式 数字图片 number是要显示的数字表达式 src是图片源的文件名,支持SourceAnimation ?
如果src=\则会使用number_number_...图片文件来绘制数字。
类似Time部件 图片遮罩
x,y坐标 src遮罩图片,不透明黑色部分表示不透明,其他部分为透明。
align坐标是相对于所属图片还是绝对位置,如果是相对,图片移动是遮罩会相应跟随移动。
否则遮罩保持不动。
遮罩同样可以有源动画,旋转动画,和位置动画,属性支持变量表达式 ?
元素动画 所有元素都支持动画 动画分为:
图片源,位置,大小,旋转,透明度 每种动画相互独立,各自循环播放,动画若干关键帧组成,关键帧包括帧属性和时间,除图片源动画外,其它动画会根据当前时间找到相邻的两个关键帧,然后线性插值计算当前的属性。
如果第一帧时间不从0开始,则默认时间为0的第一帧为图片原始属性,时间单位为毫秒。
位置动画中的位置是相对于图片自身的坐标。
例子:
位置动画表示1秒从屏幕最左端到最右端,停留1秒,透明度动画表示开始透明度为175,在从最左端到最右端过程中透明度不变,到达最右端后秒渐变为不透明,然后秒变为透明消失。
然后循环播放。
注意:
只有图片支持图片源动画 图片源动画稍有不同,没有插值,x,y可选,表示相对图片的位置,当前的图片是在列表里的找到第一个大于当前时间的那个点指定的 Group
Group是组的意思,相当于控件们的一个容器,可以用来包含住其他元素,比如图片,时间等等。
通过给组添加坐标和宽高,可以便捷地一次性调整多个元素的位置和大小。
同时Group还能添加各种动画,种类与Image一样全面 ?
新的版本还添加了帧率控制,如果一个组里的元素都是静止的,可以添加framaRate=\,系统会根据当前各个组的帧率来自动调整刷新频率,降低内存和cpu占用。
所以很推荐大家在添加Group时随手加上对应的帧率 Slider name:
名字,用来做变量名 bounceInitSpeed,bounceAccelation回弹动画初始速度和加速度(距离单位为像素,时间单位为秒),都支持表达式 ?
alwaysShow=\默认是false,当一个Slider可见时,其他Slider消失。
可以有任意个Slider部件。
TriggerSlider的状态切换时,支持Trigger触发 Slider起始点:
起始点中包含的元素都会跟随当前操作的拖动移动位置。
//从其他状态切换到NormalState时,触发该Trigger
//从其他状态切换到PressedState时,触发该Trigger //从其他状态切换到ReachedState时,触发该Trigger-->
三个状态都可以不指定,可以使用变量来改变其他界面元素状态来表示触发过程。
Slider目标点:
当起始点的x,y点落入EndPoint目标区域矩形时,达到触发位置,此时松开手指即可以产生触发,可以有多个触发目的。
例子:
?
Slider的intent也可以为Trigger和Command,一个Trigger可以有多个Command。
Trigger和Command请见Trigger&
Command Unlocker继承Slider,以上用法只需把tag名的Slider改为Unlocker.解锁部件回弹动画,请见/ ?
锁屏音效 StartPoint:
normalSound,pressedSound,指定在normal和press状态播放的音效EndPoint:
reachedSound,到达该endpoint后播放的音效 按钮 按钮元素可以用来接收点击,双击等事件,并可根据trigger的定义来控制界面上其他元素。
按钮元素也可以将事件传递给界面上其他元素,来使其他元素响应用户在锁屏界面上的操作。
所有元素增加name属性,按钮的控制对象通过name来指定。
x,y,w,h指定了按钮区域。
listener指定该按钮的事件要传给哪个元素。
一个Button可以有若干个trigger,trigger定义了按钮动作引发相关的操作,如控制某元素的属性 ?
action:
按钮动作:
down(按下),up(抬起),double(双击)target:
控制目标名 property:
属性名,目前支持:
visibility以后会增加其他属性控制。
value:
属性值,目前针对boolean有:
true,false,toggle 通常用button控制的目标有三类,分别是可见性控制,播放动画,以及执行命令,简单演示:
关于命令在后面会有详细的介绍Button元素的xml结构:
...
... 音乐播放器 指定名称,从而使显示与否可以另一个按钮控制,比如双击。
必须包含4个Button和1个Text,并且name分别为指定的名称。
可以包含其他任意界面元素如Image等。
autoShowtrue/false如果在播放音乐时进入锁屏,是否自动显示MusicControlmusic_state播放状态0停止1播放 ?
更新后音乐播放支持歌名和歌手名字分开显示,分别使用@music_和@music_ 例子:
双击控制音乐控制显示隐