小米主题xml编码高级教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MAML教程目录[隐藏]1MORE&MAML概述2MAML在百变锁屏中的应用3MAML在百变壁纸及动态图标中的应用4壁纸元素5变量6变量数组7全局变量8表达式9文本10时间11日期12图片13数字图片14图片遮罩15元素动画16Group17Slider18按钮19音乐播放器20音量调节21ContentProvider22Trigger&Command23动态帧率24传感器调用MORE&MAML概述MAML引擎脚本语言MIUIApplicationMarkupLanguageforMORE(MIUIMORE引擎应用标记语言)MORE渲染引擎MarkupOrientedRenderingEngine(基于标记语言的渲染引擎)概述最初用于百变锁屏,使用xml用特定的语法描述锁屏界面。后来不断增强功能,逐步演化成一套接近通用的界面描述语言和图形渲染引擎,在一定需求下可用于开发风格多变的用户界面。可方便地通过更换皮肤改变界面风格、动画甚至交互方式。MAML语言和Android的界面描述xml类似.所不同的是Android描述的是静态界面,对界面元素的更改依赖java代码。MAML描述的是静态界面+动态属性,UI在时间线上按一定的帧率不断刷新,UI显示根据元素属性的变量表达式的计算结果实时更新。MAML语言和运行时引擎已经从锁屏中独立出来作为MIUI内置的通用框架,除了显示时间日期等,还支持查询标准ContentProvider来获取各种信息如天气。显示图片文本等各种元素,各种动画,滑动点击等界面交互控件,适于实现展示信息或有简单交互操作的界面。比如时钟、天气小部件、闹钟响铃界面。框架支持动态帧率,不必按照固定帧率不停渲染,在没有动画和更新的时侯停止渲染,此时仅占用极少资源,对于缓慢变化的动画使用低帧率渲染,高动态的动画开始后立即调整到高帧率全速渲染。全速渲染时全屏帧率基本可以达到60帧。合理使用可以既炫酷又不费电。MORE引擎适用哪些类型的界面开发1.展示性的信息,如图片,文字(不适合列表信息和大段文本,不适合用户输入)2.需要有丰富的界面动画及交互动画。3.较简单的交互,拖拽、点击(但不限于拖拽点击,通过xml代码可以实现部分类似java编程中onTouchEvent所能做到的交互)4.使用标准控件无法实现的信息展示方式,或者无法实现的交互方式,需要自制控件的,大部分可以通过xml代码方便地描述实现。5.需要灵活更换皮肤风格,并且界面动画和交互动画甚至部分交互方式都可以通过皮肤更换。无需更改应用程序。比如一些简单的工具类应用程序、无输入的操作界面希望能更换操作模式(例如来电接听界面)和桌面小工具可以考虑使用,也可以作为一个动画框架实现类似电子贺卡的界面,可支持交互,做为应用程序中的彩蛋(比如短信中的生日彩蛋)MIUI主题使用MORE的模块百变锁屏com.android.internal.policy.impl.AwesomeLockScreen桌面时钟com.miui.home.launcher.gadget.AwesomeClock相框小工具com.miui.home.launcher.gadget.PhotoFrame闹钟响铃界面com.android.deskclock.AlarmAlertFullScreen自由桌面动态小部件com.miui.home.launcher.gadget.AwesomeGadget百变壁纸com.miui.home.launcher.MiWallpaper(基于SurfaceView)动态图标天气小工具com.miui.home.launcher.gadget.Weather_2x4_custom(v4)MAML在百变锁屏中的应用百变锁屏在主题包里的lockscreen/advance目录下,manifest.xml文件是描述脚本LockscreenframeRate=displayDesktop=showSysWallpaper=screenWidth=720Image/Image/Unlocker/Unlocker/Time/DateTime/…Text//LockscreenframeRate:指定帧率,如果动画缓慢,可以指定小一点的值,省电。默认为30。displayDesktop:默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher或者是锁屏前的应用程序。可以完美实现WP7,Meego,阿里云等的解锁界面。showSysWallpaper:默认为false,是否在锁屏界面显示桌面壁纸。开启后如果没有指定锁屏壁纸Wallpaper/,会将桌面壁纸作为锁屏的壁纸。screenWidth:设定屏幕宽度标准。如果指定为720,锁屏中所有元素的位置都按720p的布局编写,480p的手机会自动进行缩放。MAML在百变壁纸及动态图标中的应用百变壁纸百变壁纸在主题包的miwallpaper目录下,描述文件也是manifest.xml。根节点表示与百变锁屏基本一致:MiWallpaperframeRate=1width=720height=1280screenWidth=720Var/Image/Group/…/MiWallpaperwidth:表示百变壁纸的宽度。height:表示高度另外,如果要实现元素跟随手指滑动的效果,需要借助#wallpaper_offset_pixel_x,#wallpaper_offset_xwallpaper_offset_pixel_x:偏移的像素数(0~-1*屏宽)wallpaper_offset_x:偏移百分比(0~1.0)二者关系:#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=1.0为了适配不同分辨率机型,建议使用#wallpaper_offset_x。建议的设计方式:1.壁纸切成双屏宽(屏宽指的是screenWidth)2.壁纸定位:x=-#wallpaper_offset_x*屏宽3.需要跟随滑动的元素定位:x=-#wallpaper_offset_x*屏宽+相对壁纸的位置动态图标动态图标在主题包icons\fancy_icons\目录下,每个动态图标是一个文件夹,文件夹的名字是对应的app包名。例如日历的动态图标是一个叫com.android.calendar的文件夹,里面包含manifest.xml描述文件Iconversion=1frameRate=width=136height=136screenWidth=720useVariableUpdater=hideApplicationMessage=Var/Image/Text/DateTime/…/IconhideApplicationMessage:默认false,屏蔽右上角的通知标志。useVariableUpdater:指定需要哪些系统变量,目前包括电量和时间,而且可以指定时间的更新周期,如果时间小工具每秒更新一次,需要指定更新周期为1秒,否则默认会每分钟更新一次。如果小工具或动态图标只显示日期,则每天更新一次,可以指定更新周期为1天。尽量选择较长的更新周期,以节约系统资源。目前支持的tag:Battery,DateTime.Day,DateTime.Hour,DateTime.Minute,DateTime.Second如果某个小工具不需要电量或时间变量,则需要使用useVariableUpdater=none,指定不做时间变量等更新。如果某个小工具显示系统电量并且显示根据时间每小时更换背景图片:useVariableUpdater=Battery,DateTime.Hour如果需要每秒进行多次刷新,可以直接使用frameRate壁纸元素Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和Image元素相同,可以有动画和其他属性控制。如果没有此元素则不显示壁纸。可以有多个。例子:Wallpaper/变量Var变量Varname=expression=type=const=threshold=persist=/name变量名expression变量对应的表达式或常量注意:如果定义字符串常量需要多一套单引号:expression='mystring'type=number/string定义数值变量或字符串变量默认:numberconst=true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。如果变量值会在锁屏运行期间改变,const设为false默认:falsethreshold阈值触发,当变量值的变化超过设定的阈值时,可以触发一些命令。例如:Varname=time3expression=#minute%10threshold=1TriggerCommandtarget=time3_anim.visibilityvalue=true/Commandtarget=time3_anim.animationvalue=play/Commandtarget=time3_anim_new.visibilityvalue=false/Commandtarget=time_3_anim_new.visiblityvalue=truedelay=400/Commandtarget=time_3_anim_new.animationvalue=playdelay=400//Trigger/Var上述代码表示#time3的值每变化1,就会执行Trigger/里面的所有命令persist默认false,变量持久化。指定为ture后,如果没有重新给定该变量其他的值,那么这个值会一直保存,无论解锁后重新锁定或者重新应用主题都不会还原变量数组VarArray变量数组VarArraytype=stringVarsVarname=date_format1index=#time/2000%5/Varname=date_format2index=2const=true/.../VarsItemsItemexpression=ifelse(isnull(@date_format),'MMMMd日EEEE',@date_format)/Itemvalue=EEEE/.../Items/VarArrayItem数组元素定义expression元素对应的表达式value如果元素是常量,则用value指定常量值//定义了一个每隔两秒轮换一次日期显示格式的DateTime元素.//数组元素可以用来根据数字变量值显示不同的字符串!--ifconstistrue,thevariablewillonlyevaluateonceattheinitialtime,--Varname=show_dateexpression=ifelse(isnull(#show_date),1,#show_date)type=numberconst=true/Varname=text_size_dateexpression=ifelse(isnull(#text_size_date),18,#text_size_date)type=numberconst=true/VarArraytype=stringVarsVarname=date_format1index=#time/2000%5/Varna

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功