最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Android主题制作教程

IT圈 admin 63浏览 0评论

2023年12月25日发(作者:俞幻梅)

主题教程

(2.10.30)

一、MIUI主题

首先,我们手机的UI是由很多部分组成的,如锁屏、通知栏、桌面壁纸、图标等等。如果我们把手机比喻成一个房子,上述的部分可想象成房子的门、窗、地板、吊灯、座椅等。那我们可以认为原生的android系统就是一个毛坯房,MIUI是在这之上的一个简装,自定义主题就是你自己给房子做的装修。

MIUI提供主题自定义功能,其实就相当于帮你请了一个工程队,你可以用从众多装修方案(主题包)中选择自己喜欢的效果,最后交给工程队实施。而装修方案可大可小,大至全屋翻新,小到只换一盏灯。目前MIUI会自带两个主题包,达人们也可以设计自己的主题包,大家就可以借用达人们共享出来的设计。

二、准备工作

1.主题测试机器

工欲善其事必先利其器,做题之前首先得有一部能刷MIUI的手机作为测试机。MIUI现有支持v4的机型分成按分辨率,可分成两类480p(480*854和480*800)与720p(720*1280),分辨率对以后的主题制作有这影响,见后面详述。

480p的机子有:

小米手机1/1S (自带MIUI)、HTC Desire S、HTC Incredible S、Samsung I9100、华为 Honor、索爱 LT18i 、Google Nexus S

720P的机子有:

小米手机2(自带MIUI)、Google Galaxy Nexus、Galaxy S III I9300、Google Galaxy Nexus、华为 Ascend D1、索尼LT26i、HTC One X、LG LU6200

附上刷机教程连接/

注意:在针对新版主题客户端的测试方案上线之前,主题制作者只能在2.10.26开发版或之前版本进行测试

2.设计界面

制作主题之前可先根据官方提供的主题界面模板,对主题界面进行设计,然后再进行切图,将设计稿切片,分成各个小部分,用与主题制作。

3.主题制作软件的安装

官方主题工具:/

使用此工具需要java环境的支持,未安装的同学请下载:/themeeditor/jre6_2.8.3_

解压得jre6文件夹,将其放到到MIUIThemeEditor目录下(图1所示)。

s下运行,““

下运行,“”

os运行,“d”

图1

三、主题制作

1.主题工具的使用

打开主题工具后可点击文件新建主题(图2),或选择打开主题模板

图2

解压主题包:拖拽后缀名为mtz格式的主题文件,置于主题工具上(如图3),等待一段时间,便会有一个与mtz文件名称相同的文件夹陈升,这便是解包操作。

图3

打开主题以后可看到(图4)主题名称、制作者、设计者,以及主题版本等信息,此为必填项目,ui版本选择为4.0,点击下方保存主题按钮主题文件夹内就会生成文件,来记录下这些信息。

图4

主题打包mtz:点击工具下方打包即可生成mtz格式主题文件。点击打包并导入手机可将主题打包并导入手机并应用,前提必须开启手机的USB调试,并安装手机驱动,驱动可通过豌豆荚、qq手机管家等android pc管理软件进行安装,能连上这类管理软件即代表手机驱动安装完成。

2.图片替换

不同分辨率的手机,其图片素材尺寸以及素材存放的位置也有所不同。如图5所示

图5

以桌面图标为例,480p图标文件放在drawable-hdpi,720p则为drawable-xhdpi,其他模块的文件位置存放位置也与之相似。

桌面图标替换:打开主题工具,先在左边选择要替换的图标,然后点击图片选择对应的图标进行替换,也可使用拖拽的方式,将要替换的图标直接拖至其上方,完成替换。(见图6)

图6

图标除了直接替换对应的图片外,还可以通过几张特定的图片来控制图标风格风格(主要用于第三方图标的风格统一),icon_为最上面的一层;icon_控制图标显示大小形状,黑色区域显示图标形状;icon_为不变色背景,icon_变色背景,会根据图标颜色生成各种颜色背景。如图7所示,

图7

主题图片素材当中还有一种重要的图片格式,叫做。这种格式的图片是安卓平台上新创的一种拉伸却不失真的图片,这种图片主要用于一些尺寸不固定的图片,或者上面的是上面的内容区与需要特殊控制的图片,比如短信气泡,输入文字框等。这种图片的文件名会是这种格式,用主题工具解包以后,所生成的图片其上下左右各会有1像素黑边,

如图8所示

1号黑色条位置控制图片横向拉伸区域,就是左图纵向绿色区域

2号黑色条位置控制图片纵向拉伸区域,就是左图横向绿色区域

3号黑色条位置控制输入框内文字显示的上下位置,即右图紫色区域上下边界

4号黑色条位置控制输入框内文字显示的左右边距,即右图紫色区域左右边界

图8

黑边可以在ps内直接画上,也可通过主题工具内附带的软件进行编辑(如图9)。在使用画黑边时如果失误多选了部分,可按住shift键,再点击即可擦掉,最后按ctrl+s保存。需要注意的是图片必须画上黑边,不然在应用图片的时候,即使放了对应的图片手机上也不会显示。用ps画黑边的时候需要注意,必须用纯黑色,不能有色差。

图9

3.主题工具中的模块介绍

主题内基本模块

ts 通讯录以及拨号

plorer 文件管理器

短信

下载管理

gs 设置

ui 通知栏以及任务管理器

r 系统更新

am 防打扰

备份

桌面

kassistant 流量监控

framework-miui-res MIUI全局

framework-res Android原生全局

以上模块为主题工具内带有图解的模块

MIUI全局和Android原生全局内主要存放文件是会在各种界面都会调用到的东西,比如按钮,弹窗,进度条等等,如在当前模块没有想要修改的素材时,可以去全局找。

接下来以对短信模块的修改为例子,简单的说说使用如何使用主题工具对主题进行编辑。

点击模块,若当前无此模块可将手机连上电脑,通过手机导入素材。

图10

选择要替换的图片,右边区域会显示图片存放的路径,以及默认素材图片尺寸,图10的中的黑圈中的数字就是默认素材的尺寸。将从设计稿内提取的素材替换进去,然后使用主题工具内提供的工具,画上内容区与拉伸区。替换完成后点击打包并导入手机,测试替换效果。

5.简单锁屏的制作

百变锁屏在主题包里的lockscreen/advance目录下,文件是描述脚本,以上代码为简单的iphone锁屏的代码,所谓的解锁就是将解锁起始点移动到解锁区域的过程,在这个解锁过程中可以沿着运动轨迹(图中的白线path)进行,也可完全自由的运动,当解锁起始点完全包含在结束区域时解锁完成。XY坐标为图片左上角的点,因为miui支持不同分辨率,所以在写坐标时需要注意,当图片以屏幕底部对齐时,其y坐标,需要以这种形式书写:y="#screen_height-89",意思其y坐标是以屏幕高度减去图片距离屏幕底部的高度。

附上百变锁屏综合教程

/share/link?shareid=114192&uk=1090759843

_文件说明

主题文件内除了图片以外,还有theme_,这个主要用于控制当前模块下的文字颜色,提示文字等信息。里面的颜色代码与普通的十六进制颜色代码不同,是在还在前面增加了2位用于控制文字透明度,可在主题工具中点击切换编辑模式查看当前模块的theme_文件

7.关于壁纸和铃声

替换铃声

将准备好的铃声放在主题包的ringtones目录下,并按如下规则命名。

来电铃声:3

通知铃声:3

闹钟铃声 : 3

替换壁纸(包括桌面壁纸和锁屏壁纸)

桌面壁纸和锁屏壁纸放在主题包的 wallpaper 目录下:

桌面壁纸: default_

锁屏壁纸 : default_lock_

领先android的锁屏技术教程

我们的目标是最大化锁屏界面的自由度,让解锁界面和解锁方式可以通过主题包很方便的更换。 百变锁屏时时候进军2.0新时代了,我们仍会继续发力,加入更多更酷的新功能!

百变锁屏在主题包里的lockscreen/advance目录下,文件是描述脚本

frameRate: 指定帧率,如果动画缓慢,可以指定小一点的值,省电。默认为30。

displayDesktop属性,默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher或者是锁屏前的应用程序。可以完美实现WP7,Meego,阿里云等的解锁界面。

界面元素的遮挡取决于在xml中出现的先后,最先出现的在最下层。

壁纸元素

Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和Image元素相同,可以有动画和其他属性控制。如果没有此元素则不显示壁纸。可以有多个。

例子:

变量及变量数组

分别定义单个变量和变量数组

name 变量名

expression 变量对应的表达式或常量 注意:如果定义字符串常量需要多一套单引号:

expression="'my string'"

type= number/string 定义数值变量或字符串变量 默认:number

const =true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。如果变量值会在锁屏运行期间改变,const设为false 默认:false

...

...

Item 数组元素定义

expression 元素对应的表达式

value 如果元素是常量,则用value指定常量值

// 定义了一个每隔两秒轮换一次日期显示格式的DateTime元素.

//数组元素可以用来根据数字变量值显示不同的字符串

const="true"/>

type="number"

const="true"/>

// 显示英文月份

...

变量表达式,src除外

当前支持变量: 变量以#开头

* 解锁物件属性: 格式:物件名.属性名 #_x

move_x 解锁时在x方向移动距离

move_y 解锁时在y方向移动距离

move_dist 解锁时移动距离

state 解锁状态: 正常:0 按下:1 到达解锁位置:2

* 全局变量:

time 当前时间,long

touch_x 当前触摸点 x

touch_y 当前触摸点 y

battery_level 电池电量 0-100

sms_unread_count 未读短信

call_missed_count 未接电话

// 时间日期变量

time_sys 变量,为系统当前时间毫秒数。 ampm 上下午 // 0 am, 1 pm

hour12 小时,12小时制

hour24 小时,24小时制

minute 分钟

second 秒

year 年

month 月 //0-11

date 日

day_of_week 星期 // 1-7 星期日到星期六

screen_width 屏幕宽度

screen_height 屏幕高度

battery_state 电池状态: 正常:0 充电:1 电量低:2 已充满:3

例子:alpha值的变量表达式表示该图片只有在非充电状态显示,并且随着解锁水平方向的拖动逐渐变透明至

消失。

alpha="(255-#_x/100*255)*min(1, abs(1-#battery_state))"/>

表达式

支持加减乘除取模括号和函数

加减乘除取模 : + - * / %

支持函数:sin, cos, tan, asin, acos, atan, sinh, cosh, sqrt, abs, min, max 不解释

len(数字) 给定数字位数 len(1234)=4

digit(数字, 第几位) 取给定数字的第几位 digit(1234, 2) = 3

round() 四舍五入取整 int()向下取整

eq(x, y) // x==y ? 1 : 0

ne(x, y) // x!=y ? 1 : 0

ge(x, y) // x>=y ? 1 : 0

gt(x, y) // x>y ? 1 : 0

le(x, y) // x<=y ? 1 : 0

lt(x, y) // x

isnull(x) // x==null ? 1 : 0 // 是否表达式包含空变量,通常用于判断绑定的变量是否查到数据

not(x) x>0 ? 0 : 1

ifelse(x, y, z) // x>0 ? y : z

ifelse(x1, y1, x2, y2, ... , z)

if x1>0 return y1; else if x2>0 return y2; ... ; else return z

+可以拼接字符串 , 一些函数也可以支持字符串,isnull可以判断字符串变量是否为空,ifelse可以选择字符串,字符串比较函数eqs(@string1, @string2)

元素可见性支持表达式

visibility=“表达式” <=0 不可见 >0可见 Image, Text, Time的属性 align= left, center,

right 坐标点水平对齐方式

Image, Time 属性 alignV= top, center, bottom 坐标点垂直对齐方式

文本部件

显示指定格式的文字,坐标属性支持变量

color:文字颜色,#FFFFFFFF

size: 文字大小

format:如果需要在文字中显示变量数字,需要指定格式, 用%d 指定数字位置

paras: 如果指定了format, 需要在paras里指定%d对应的变量表达式, 可以有多个变量表达式用"," 隔开

align:left, center, right,文字坐标的对齐方式

Text新增自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示

angle: 旋转角度

自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示 文本支持多行

#_height 为折行后的高度

可选属性:

spacingMult 行距倍数 默认1

spacingAdd 行距增加量 默认0

next_alarm_time 下一个闹钟时间

文字和日期支持旋转

size="24" format="正在充电(%d%%)" paras="#battery_level" align="center"/>

文本元素支持文字宽度变量属性 text_width

#_width

textExp属性支持字符串表达式:

例子:天气信息,如果温度为空显示-- 非空显示数值

w="360" size="36" color="#ffffff" align="right"

textExp="ifelse(isnull(#weather_temperature),'--',#weather_temperature) + '℃'"

/>

时间部件

src表示时间图片的前缀,如下表示使用time_, time_, ... time_,

time_. 坐标属性支持变量表达式

日期部件

显示指定格式的日期

format: 支持标准日期格式, 另外增加农历: NNNN

九月: M -> 9

MM -> 09

7分钟:

m -> 7

mm -> 07

mmm -> 007

mmmm -> 0007

1970年4月6日 3:23am

"yyyy/MM/dd h:mmaa" -> "1970/04/06 3:23am"

"M月d日 h:mmaa" -> "4月6日 3:23am"

"E" -> "周三"

"EEEE" -> "星期三"

"纪念日: M/d" -> "纪念日: 4/6"

24小时: "kk:mm" -> "13:34"

图片部件

图片部件用来在锁屏界面上显示一个图片,可以指定各种属性

alpha="" antiAlias=""/>

x,y : 相对于屏幕左上角的坐标

w,h : 宽和高

centerX, centerY : 旋转中心

angle : 旋转角度,一周360度

src : 图片名称

srcid : 图片序列后缀数字,一般用变量表示,可以根据变量显示不同的图片,如果src="" srcid="1" 则最后会显示图片 "pic_"

alpha : 透明度 0-255, 小于等于0不显示

antiAlias: true/false 抗锯齿,如果为true图片在变形旋转时不会有锯齿,但是速度会慢

srcExp:图片源表达式

srcFormat:图片源格式

srcForamtExp:图片源格式表达式

srcParas:图片源参数

例子:

元素实际位置变量,可以获得元素在动画时的实际位置:actual_x actual_y

...

#_x #_y 用图片显示数字的部件

number是要显示的数字表达式

src是图片源的文件名,支持SourceAnimation

如果src="" 则会使用 number_ number_ ... 图片文件来绘制数字。类似Time部件

//srcExp:图片源表达式

+ '.png'"/>

元素动画

所有元素都支持动画

动画分为:图片源,位置,大小,旋转,透明度

每种动画相互独立,各自循环播放,动画由若干关键帧组成,关键帧包括帧属性和时间,除图片源动画外,其它动画会根据当前时间找到相邻的两个关键帧,然后线性插值计算当前的属性。 如果第一帧时间不从0开始,则默认时间为0的第一帧为图片原始属性,时间单位为毫秒。 位置动画中的位置是相对于图片自身的坐标。

例子:位置动画表示1秒从屏幕最左端到最右端,停留1秒,透明度动画表示开始透明度为175,在从最左端到最右端过程中透明度不变,到达最右端后0.5秒渐变为不透明,然后0.5秒变为透明消失。 然后循环播放。

注意:只有图片支持图片源动画

图片源动画稍有不同,没有插值,x, y 可选,表示相对图片的位置, 当前的图片是在列表里的找到第一个大于当前时间的那个点指定的

图片遮罩

x,y 坐标, src为遮罩图片,不透明黑色部分表示不透明,其他部分为透明。 align:坐标是相对于所属图片还是绝对位置,如果是相对,图片移动是遮罩会相应跟随移动。否则遮罩保持不动。

遮罩同样可以有源动画,旋转动画,和位置动画,属性支持变量表达式

category属性

界面上除解锁部件外所有元素可以指定 category属性,Charging BatteryLow BatteryFull

Normal, 指定了category属性的元素仅会在该状态下显示,可以用来做充电文字,动画等的

显示。

Slider部件

name: 名字,用来做变量名

bounceInitSpeed, bounceAccelation 回弹动画初始速度和加速度(距离单位为像素,时间单位为秒),都支持表达式

可以有任意个Slider部件。

起始点,表示点击区域,坐标和宽高,起始点中包含的元素都会跟随当前操作的拖动移动位置。

alwaysShow="true/false"

正常状态,可以包含若干元素

在点击区域按下,表示开始触发操作,拖动,隐藏其他状态元素,显示这些元素,

达到触发目标后,隐藏其他元素,显示这些元素

三个状态都可以不指定,可以使用变量来改变其他界面元素状态来表示触发过程。

Slider目的,坐标和大小,当起始点的x,y点落入EndPoint目标区域矩形时,达到触发位置,此时松开手指即可以产生触发

可以有多个触发目的

//Slider执行的动作,可以指定不同的intent

< Intent action="" type="" category="" package="" class=""/>

//Slider路径 tolerance:开始触发操作后移动时路径最大距离超过这个值则取消,回到正常状态。Path可以指定

x,y坐标,默认为0,Position的坐标为相对坐标。

例子:

Slider的intent也可以为Trigger和Command,一个Trigger可以有多个Command。

Trigger和Command请见Trigger和Command

Unlocker继承Slider,以上用法只需把tag名的Slider改为Unlocker.

解锁部件回弹动画,请见/

锁屏音效

StartPoint: normalSound, pressedSound ,指定在normal和press状态播放的音效

EndPoint: reachedSound, 到达该endpoint后播放的音效

pressedSound="sound_3">

按钮元素

按钮元素可以用来接收点击,双击等事件,并可根据trigger的定义来控制界面上其他元素。按钮元素也可以将事件传递给界面上其他元素,来使其他元素响应用户在锁屏界面上的操作。

音乐控制元素

指定名称,从而使显示与否可以由另一个按钮控制,比如双击。

必须包含4个Button和1个Text,并且name分别为指定的名称。可以包含其他任意界面元素如Image等。

属性autoShow, true/false 如果进入锁屏是在播放音乐是否自动显示MusicControl

music_state ,数字, 播放状态 0停止 1播放

visibility 数字 0=false 1=true

//专辑封面,和普通Image一样除了图片是绑定到专辑封面的,可以指定大小,加Mask等。

//歌名和歌手显示文字

//上一首按钮

音量调节

#volume_level 现在音量 #volume_level_old 调节之前的音量 取值: 1-15 根据二者比较判断是增大还是减小

#volume_type

// STREAM_VOICE_CALL = 0;

// /* The audio stream for system sounds */

// STREAM_SYSTEM = 1;

// /* The audio stream for the phone ring and message alerts */

// STREAM_RING = 2;

// /* The audio stream for music playback */

// STREAM_MUSIC = 3;

// /* The audio stream for alarms */

// STREAM_ALARM = 4;

// /* The audio stream for notifications */

// STREAM_NOTIFICATION = 5;

// /* @hide The audio stream for phone calls when connected on bluetooth */

// STREAM_BLUETOOTH_SCO = 6;

// /* @hide The audio stream for enforced system sounds in certain countries (e.g

camera in Japan) */

// STREAM_SYSTEM_ENFORCED = 7;

// /* @hide The audio stream for DTMF tones */

// STREAM_DTMF = 8;

// /* @hide The audio stream for text to speech (TTS) */

// STREAM_TTS = 9;

// /* @hide The audio stream for FM */

// STREAM_FM = 10;

一般锁屏下只能调 music 3

#volume_type>=0 表示正在调节音量,调节完毕后值为-1 可根据这个显示或隐藏音量显示

content privider

content provider支持where的格式化:

where="" whereFormat="" whereParas=""

content provider 支持依赖关系,即某个ContentProviderBinder查询结束后获取的变量作为下一个ContentProviderBinder查询的参数

name2查询结束后会触发name1的查询,name1的查询可以使用name2的变量。并且如果name2数据发生变化重新查询后,会触发name1的重新查询。

content provider提供了查询应用程序信息的通用接口,定义了新的xml代码来查询content

provider,并查询到的信息绑定到变量上,用来显示第三方应用程序的信息,只要第三方应用

提供相应的content provider。比如可以显示天气信息,邮件,待办事项,便签,等等,你也可以写一个应用程序查询任何你想要的信息并通过content provider来提供给锁屏使用。

columns="col1,col2" where="" args="" order="" countName="count_name">

VariableBinders: 定义各种变量绑定到的源,目前仅支持content provider。

ContentProviderBinder: 定义一个content provider源和绑定到它上面的变量

uri: content provider uri, 指定选用哪个content provider

uriFormat: 如果uri需要添加变量,可以用格式化,需要和uriParas一起使用

uriParas: 同Text element 的格式

columns: 需要查询的列名,用逗号分隔

where: 查询条件,同 SQL

args: "where" 的参数.

order: 排序条件, 同 SQL

countName: 将查询结构数量绑定到该变量名

Variable: 定一个绑定变量

name: 变量名

type: content provider中的数据类型: string/double/float/int/long

column: 变量绑定到的列的名称.

row: 变量绑定到的行数,默认为0.

uriFormat="content://r/weather/current/%d"

uriParas="#time_sys"

columns="iconResId,location,temperature,lowTemperature,highTemperature,description"

countName="hasweather">

align="center" format="%s %s %d℃"

paras="@weather_location,@weather_description,#weather_temperature" />

visibility="#hasweather*not(isnull(#weather_lowTemperature))*not(isnull(#weather_highTemperature))"

x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center"

format="%d℃ / %d℃" paras="#weather_lowTemperature,#weather_highTemperature"/>

visibility="#hasweather*isnull(#weather_lowTemperature)*not(isnull(#weather_highTemperature))"

x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center"

format="--℃ / %d℃" paras="#weather_highTemperature"/>

visibility="#hasweather*not(isnull(#weather_lowTemperature))*isnull(#weather_highTemperature)"

x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center"

format="%d℃ / --℃" paras="#weather_lowTemperature" />

align="center">

天气id列表:

weather_chance_of_rain = 2130837536;

weather_chance_snow = 2130837540;

weather_chance_storm = 2130837544;

weather_clear = 2130837556;

weather_cloudy = 2130837560;

weather_flurries = 2130837564;

weather_fog = 2130837568;

weather_heavy_rain = 2130837572;

weather_icy_sleet = 2130837576;

weather_mist = 2130837583;

weather_partly_cloudy = 2130837587;

weather_rain = 2130837600;

weather_snow_rain = 2130837606;

weather_snow = 2130837608;

weather_sunny = 2130837612;

weather_thunderstorm = 2130837617;

weather_unknown = 2130837621;

weather_windy = 2130837626;

//查询MIUI便签内容,显示第一条便签内容和修改时间

order="modified_date DESC" countName="note_count">

format="yyyy年MMMMdd日 hh:mm"/>

marqueeSpeed="60"

text="@note_snippet1"/>

查询未接来电的参数

uri ="content://call_log/calls";

columns = "_id,number"

where = "type=3 AND new=1";

Trigger和Command

target, 对象.animation 表示控制对象的动画

value: play,表示播放指定对象的动画

//用按钮实现开关

//每个Button中可以有若干个Command

//

//数据

//仅切换到开,用另一个button切换到关

//铃音/静音/震动

三种状态切换

下面和上面同样效果

仅正常和静音切换

仅正常和震动切换

仅切换到静音,用其他button切换到其他状态

//USB存储 toggle/on/off

//Wifi toggle/on/off

//用滑动方式实现开关

alwaysShow="true"

visibility="#usb_mode" >

状态变量,仅在添加相应command后才有效

// switch state

// 0 silent, 1 vibrate, 2 normal

#ring_mode

// 0 disabled, 1 enabled, 2 problem, 3 half(intermediate)

#wifi_state

// 0 off, 1 on, 2 half

#bluetooth_state

// 0 off, 1 on

#data_state

// 0 disconnected, 1 charge only, 2 storage, 3 intermediate

#usb_mode

Trigger的command支持变量赋值

name:变量名,expression:赋值表达式

command支持动画播放控制

动态帧率(大大降低锁屏的耗电)

1. 简单用法

除了原来的frameRate属性控制普通状态下的帧率外, 还支持分别设置充电、电量低、充满电状态下的帧率,以方便的控制这些状态下的帧率,达到省电的目标。 比如普通状态下没有动画,帧率可以设为0,充电状态下有动画,帧率可以设为30,以显示平滑的动画。普通状态下就可以非常省电

例如:

frameRateCharging="30" frameRateBatteryLow="20" frameRateBatteryFull="1"

2. 高级用法 为了在xml描述语言中根据时间线指定不同帧率,新增一种element,叫做FramerateController,此元素和其他界面元素一样可以被添加到各个容器中,此元素包含一个帧率控制时间线,指定在一定的时间使用一定的帧率。 xml看起来如下:

此元素会控制它所在容器下的时间线的帧率,即,所有该容器下的元素的动画都会与此元素指定的帧率变化同步。

所有变量

unlocker object arrtibutes: format:ty. For example:

#_x

move_x // the offset of unlocker in x direction

move_y //the offset of unlocker in y direction

move_dist //unlocker moves distance

state //unlocker state: normal:0,pressed:1,reached:2

bmp_width, bmp_height Image //element attributes

actual_x,actual_y,actual_w,actual_h // to get the actual position and size of

element in animation

music_state // the state of MusicControl player state, stop:0,play:1

* globel variables:

@next_alarm_time //string 下个闹钟时间

screen_width 屏幕宽度

screen_height 屏幕高度

raw_screen_width 未经缩放后的原始屏幕宽度

raw_screen_height

time 当前时间,long

touch_x 当前触摸点 x

touch_y 当前触摸点 y

touch_begin_x

touch_begin_y

touch_begin_time

intercept_sys_touch 是否截获以后的触摸事件,避免被其他View捕获,例如在自由桌面widget中可以防止在widget上进行触摸操作时桌面滚动和进入编辑模式。

frame_rate 当前绘图帧率

battery_level 电池电量 0-100

sms_unread_count 未读短信

call_missed_count 未接电话

// 时间日期变量

time_sys 变量,为系统当前时间毫秒数。 ampm 上下午 // 0 am, 1 pm

hour12 小时,12小时制

hour24 小时,24小时制

minute 分钟

second 秒

year 年

month 月 //0-11

date 日

day_of_week 星期 // 1-7 星期日到星期六

battery_state 电池状态: 正常:0 充电:1 电量低:2 已充满:3

#volume_type

// STREAM_VOICE_CALL = 0;

// /* The audio stream for system sounds */

// STREAM_SYSTEM = 1;

// /* The audio stream for the phone ring and message alerts */

// STREAM_RING = 2;

// /* The audio stream for music playback */

// STREAM_MUSIC = 3;

// /* The audio stream for alarms */

// STREAM_ALARM = 4;

// /* The audio stream for notifications */

// STREAM_NOTIFICATION = 5;

// /* @hide The audio stream for phone calls when connected on bluetooth */

// STREAM_BLUETOOTH_SCO = 6;

// /* @hide The audio stream for enforced system sounds in certain countries (e.g

camera in Japan) */

// STREAM_SYSTEM_ENFORCED = 7;

// /* @hide The audio stream for DTMF tones */

// STREAM_DTMF = 8;

// /* @hide The audio stream for text to speech (TTS) */

// STREAM_TTS = 9;

// /* @hide The audio stream for FM */

// STREAM_FM = 10;

#ring_mode

0 silent, 1 vibrate, 2 normal

0 disabled, 1 enabled, 2 problem, 3 half(intermediate)

#wifi_state

0 off, 1 on, 2 half

#bluetooth_state

0 off, 1 on

#data_state

// 0 disconnected, 1 charge only, 2 storage, 3 intermediate

#usb_mode

2023年12月25日发(作者:俞幻梅)

主题教程

(2.10.30)

一、MIUI主题

首先,我们手机的UI是由很多部分组成的,如锁屏、通知栏、桌面壁纸、图标等等。如果我们把手机比喻成一个房子,上述的部分可想象成房子的门、窗、地板、吊灯、座椅等。那我们可以认为原生的android系统就是一个毛坯房,MIUI是在这之上的一个简装,自定义主题就是你自己给房子做的装修。

MIUI提供主题自定义功能,其实就相当于帮你请了一个工程队,你可以用从众多装修方案(主题包)中选择自己喜欢的效果,最后交给工程队实施。而装修方案可大可小,大至全屋翻新,小到只换一盏灯。目前MIUI会自带两个主题包,达人们也可以设计自己的主题包,大家就可以借用达人们共享出来的设计。

二、准备工作

1.主题测试机器

工欲善其事必先利其器,做题之前首先得有一部能刷MIUI的手机作为测试机。MIUI现有支持v4的机型分成按分辨率,可分成两类480p(480*854和480*800)与720p(720*1280),分辨率对以后的主题制作有这影响,见后面详述。

480p的机子有:

小米手机1/1S (自带MIUI)、HTC Desire S、HTC Incredible S、Samsung I9100、华为 Honor、索爱 LT18i 、Google Nexus S

720P的机子有:

小米手机2(自带MIUI)、Google Galaxy Nexus、Galaxy S III I9300、Google Galaxy Nexus、华为 Ascend D1、索尼LT26i、HTC One X、LG LU6200

附上刷机教程连接/

注意:在针对新版主题客户端的测试方案上线之前,主题制作者只能在2.10.26开发版或之前版本进行测试

2.设计界面

制作主题之前可先根据官方提供的主题界面模板,对主题界面进行设计,然后再进行切图,将设计稿切片,分成各个小部分,用与主题制作。

3.主题制作软件的安装

官方主题工具:/

使用此工具需要java环境的支持,未安装的同学请下载:/themeeditor/jre6_2.8.3_

解压得jre6文件夹,将其放到到MIUIThemeEditor目录下(图1所示)。

s下运行,““

下运行,“”

os运行,“d”

图1

三、主题制作

1.主题工具的使用

打开主题工具后可点击文件新建主题(图2),或选择打开主题模板

图2

解压主题包:拖拽后缀名为mtz格式的主题文件,置于主题工具上(如图3),等待一段时间,便会有一个与mtz文件名称相同的文件夹陈升,这便是解包操作。

图3

打开主题以后可看到(图4)主题名称、制作者、设计者,以及主题版本等信息,此为必填项目,ui版本选择为4.0,点击下方保存主题按钮主题文件夹内就会生成文件,来记录下这些信息。

图4

主题打包mtz:点击工具下方打包即可生成mtz格式主题文件。点击打包并导入手机可将主题打包并导入手机并应用,前提必须开启手机的USB调试,并安装手机驱动,驱动可通过豌豆荚、qq手机管家等android pc管理软件进行安装,能连上这类管理软件即代表手机驱动安装完成。

2.图片替换

不同分辨率的手机,其图片素材尺寸以及素材存放的位置也有所不同。如图5所示

图5

以桌面图标为例,480p图标文件放在drawable-hdpi,720p则为drawable-xhdpi,其他模块的文件位置存放位置也与之相似。

桌面图标替换:打开主题工具,先在左边选择要替换的图标,然后点击图片选择对应的图标进行替换,也可使用拖拽的方式,将要替换的图标直接拖至其上方,完成替换。(见图6)

图6

图标除了直接替换对应的图片外,还可以通过几张特定的图片来控制图标风格风格(主要用于第三方图标的风格统一),icon_为最上面的一层;icon_控制图标显示大小形状,黑色区域显示图标形状;icon_为不变色背景,icon_变色背景,会根据图标颜色生成各种颜色背景。如图7所示,

图7

主题图片素材当中还有一种重要的图片格式,叫做。这种格式的图片是安卓平台上新创的一种拉伸却不失真的图片,这种图片主要用于一些尺寸不固定的图片,或者上面的是上面的内容区与需要特殊控制的图片,比如短信气泡,输入文字框等。这种图片的文件名会是这种格式,用主题工具解包以后,所生成的图片其上下左右各会有1像素黑边,

如图8所示

1号黑色条位置控制图片横向拉伸区域,就是左图纵向绿色区域

2号黑色条位置控制图片纵向拉伸区域,就是左图横向绿色区域

3号黑色条位置控制输入框内文字显示的上下位置,即右图紫色区域上下边界

4号黑色条位置控制输入框内文字显示的左右边距,即右图紫色区域左右边界

图8

黑边可以在ps内直接画上,也可通过主题工具内附带的软件进行编辑(如图9)。在使用画黑边时如果失误多选了部分,可按住shift键,再点击即可擦掉,最后按ctrl+s保存。需要注意的是图片必须画上黑边,不然在应用图片的时候,即使放了对应的图片手机上也不会显示。用ps画黑边的时候需要注意,必须用纯黑色,不能有色差。

图9

3.主题工具中的模块介绍

主题内基本模块

ts 通讯录以及拨号

plorer 文件管理器

短信

下载管理

gs 设置

ui 通知栏以及任务管理器

r 系统更新

am 防打扰

备份

桌面

kassistant 流量监控

framework-miui-res MIUI全局

framework-res Android原生全局

以上模块为主题工具内带有图解的模块

MIUI全局和Android原生全局内主要存放文件是会在各种界面都会调用到的东西,比如按钮,弹窗,进度条等等,如在当前模块没有想要修改的素材时,可以去全局找。

接下来以对短信模块的修改为例子,简单的说说使用如何使用主题工具对主题进行编辑。

点击模块,若当前无此模块可将手机连上电脑,通过手机导入素材。

图10

选择要替换的图片,右边区域会显示图片存放的路径,以及默认素材图片尺寸,图10的中的黑圈中的数字就是默认素材的尺寸。将从设计稿内提取的素材替换进去,然后使用主题工具内提供的工具,画上内容区与拉伸区。替换完成后点击打包并导入手机,测试替换效果。

5.简单锁屏的制作

百变锁屏在主题包里的lockscreen/advance目录下,文件是描述脚本,以上代码为简单的iphone锁屏的代码,所谓的解锁就是将解锁起始点移动到解锁区域的过程,在这个解锁过程中可以沿着运动轨迹(图中的白线path)进行,也可完全自由的运动,当解锁起始点完全包含在结束区域时解锁完成。XY坐标为图片左上角的点,因为miui支持不同分辨率,所以在写坐标时需要注意,当图片以屏幕底部对齐时,其y坐标,需要以这种形式书写:y="#screen_height-89",意思其y坐标是以屏幕高度减去图片距离屏幕底部的高度。

附上百变锁屏综合教程

/share/link?shareid=114192&uk=1090759843

_文件说明

主题文件内除了图片以外,还有theme_,这个主要用于控制当前模块下的文字颜色,提示文字等信息。里面的颜色代码与普通的十六进制颜色代码不同,是在还在前面增加了2位用于控制文字透明度,可在主题工具中点击切换编辑模式查看当前模块的theme_文件

7.关于壁纸和铃声

替换铃声

将准备好的铃声放在主题包的ringtones目录下,并按如下规则命名。

来电铃声:3

通知铃声:3

闹钟铃声 : 3

替换壁纸(包括桌面壁纸和锁屏壁纸)

桌面壁纸和锁屏壁纸放在主题包的 wallpaper 目录下:

桌面壁纸: default_

锁屏壁纸 : default_lock_

领先android的锁屏技术教程

我们的目标是最大化锁屏界面的自由度,让解锁界面和解锁方式可以通过主题包很方便的更换。 百变锁屏时时候进军2.0新时代了,我们仍会继续发力,加入更多更酷的新功能!

百变锁屏在主题包里的lockscreen/advance目录下,文件是描述脚本

frameRate: 指定帧率,如果动画缓慢,可以指定小一点的值,省电。默认为30。

displayDesktop属性,默认为false,透视到桌面功能,如果没有锁屏壁纸或者锁屏壁纸可以被移开或透明时可以看到桌面launcher或者是锁屏前的应用程序。可以完美实现WP7,Meego,阿里云等的解锁界面。

界面元素的遮挡取决于在xml中出现的先后,最先出现的在最下层。

壁纸元素

Wallpaper元素引用系统设置的壁纸,除了不能指定图片源外其他和Image元素相同,可以有动画和其他属性控制。如果没有此元素则不显示壁纸。可以有多个。

例子:

变量及变量数组

分别定义单个变量和变量数组

name 变量名

expression 变量对应的表达式或常量 注意:如果定义字符串常量需要多一套单引号:

expression="'my string'"

type= number/string 定义数值变量或字符串变量 默认:number

const =true变量只会在初始化时计算一次,以后不会重新计算,可以提高效率。如果变量值会在锁屏运行期间改变,const设为false 默认:false

...

...

Item 数组元素定义

expression 元素对应的表达式

value 如果元素是常量,则用value指定常量值

// 定义了一个每隔两秒轮换一次日期显示格式的DateTime元素.

//数组元素可以用来根据数字变量值显示不同的字符串

const="true"/>

type="number"

const="true"/>

// 显示英文月份

...

变量表达式,src除外

当前支持变量: 变量以#开头

* 解锁物件属性: 格式:物件名.属性名 #_x

move_x 解锁时在x方向移动距离

move_y 解锁时在y方向移动距离

move_dist 解锁时移动距离

state 解锁状态: 正常:0 按下:1 到达解锁位置:2

* 全局变量:

time 当前时间,long

touch_x 当前触摸点 x

touch_y 当前触摸点 y

battery_level 电池电量 0-100

sms_unread_count 未读短信

call_missed_count 未接电话

// 时间日期变量

time_sys 变量,为系统当前时间毫秒数。 ampm 上下午 // 0 am, 1 pm

hour12 小时,12小时制

hour24 小时,24小时制

minute 分钟

second 秒

year 年

month 月 //0-11

date 日

day_of_week 星期 // 1-7 星期日到星期六

screen_width 屏幕宽度

screen_height 屏幕高度

battery_state 电池状态: 正常:0 充电:1 电量低:2 已充满:3

例子:alpha值的变量表达式表示该图片只有在非充电状态显示,并且随着解锁水平方向的拖动逐渐变透明至

消失。

alpha="(255-#_x/100*255)*min(1, abs(1-#battery_state))"/>

表达式

支持加减乘除取模括号和函数

加减乘除取模 : + - * / %

支持函数:sin, cos, tan, asin, acos, atan, sinh, cosh, sqrt, abs, min, max 不解释

len(数字) 给定数字位数 len(1234)=4

digit(数字, 第几位) 取给定数字的第几位 digit(1234, 2) = 3

round() 四舍五入取整 int()向下取整

eq(x, y) // x==y ? 1 : 0

ne(x, y) // x!=y ? 1 : 0

ge(x, y) // x>=y ? 1 : 0

gt(x, y) // x>y ? 1 : 0

le(x, y) // x<=y ? 1 : 0

lt(x, y) // x

isnull(x) // x==null ? 1 : 0 // 是否表达式包含空变量,通常用于判断绑定的变量是否查到数据

not(x) x>0 ? 0 : 1

ifelse(x, y, z) // x>0 ? y : z

ifelse(x1, y1, x2, y2, ... , z)

if x1>0 return y1; else if x2>0 return y2; ... ; else return z

+可以拼接字符串 , 一些函数也可以支持字符串,isnull可以判断字符串变量是否为空,ifelse可以选择字符串,字符串比较函数eqs(@string1, @string2)

元素可见性支持表达式

visibility=“表达式” <=0 不可见 >0可见 Image, Text, Time的属性 align= left, center,

right 坐标点水平对齐方式

Image, Time 属性 alignV= top, center, bottom 坐标点垂直对齐方式

文本部件

显示指定格式的文字,坐标属性支持变量

color:文字颜色,#FFFFFFFF

size: 文字大小

format:如果需要在文字中显示变量数字,需要指定格式, 用%d 指定数字位置

paras: 如果指定了format, 需要在paras里指定%d对应的变量表达式, 可以有多个变量表达式用"," 隔开

align:left, center, right,文字坐标的对齐方式

Text新增自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示

angle: 旋转角度

自动滚动功能,如果制定了宽度和滚动速度marqueeSpeed,在文字超过宽度的时候会自动滚动显示 文本支持多行

#_height 为折行后的高度

可选属性:

spacingMult 行距倍数 默认1

spacingAdd 行距增加量 默认0

next_alarm_time 下一个闹钟时间

文字和日期支持旋转

size="24" format="正在充电(%d%%)" paras="#battery_level" align="center"/>

文本元素支持文字宽度变量属性 text_width

#_width

textExp属性支持字符串表达式:

例子:天气信息,如果温度为空显示-- 非空显示数值

w="360" size="36" color="#ffffff" align="right"

textExp="ifelse(isnull(#weather_temperature),'--',#weather_temperature) + '℃'"

/>

时间部件

src表示时间图片的前缀,如下表示使用time_, time_, ... time_,

time_. 坐标属性支持变量表达式

日期部件

显示指定格式的日期

format: 支持标准日期格式, 另外增加农历: NNNN

九月: M -> 9

MM -> 09

7分钟:

m -> 7

mm -> 07

mmm -> 007

mmmm -> 0007

1970年4月6日 3:23am

"yyyy/MM/dd h:mmaa" -> "1970/04/06 3:23am"

"M月d日 h:mmaa" -> "4月6日 3:23am"

"E" -> "周三"

"EEEE" -> "星期三"

"纪念日: M/d" -> "纪念日: 4/6"

24小时: "kk:mm" -> "13:34"

图片部件

图片部件用来在锁屏界面上显示一个图片,可以指定各种属性

alpha="" antiAlias=""/>

x,y : 相对于屏幕左上角的坐标

w,h : 宽和高

centerX, centerY : 旋转中心

angle : 旋转角度,一周360度

src : 图片名称

srcid : 图片序列后缀数字,一般用变量表示,可以根据变量显示不同的图片,如果src="" srcid="1" 则最后会显示图片 "pic_"

alpha : 透明度 0-255, 小于等于0不显示

antiAlias: true/false 抗锯齿,如果为true图片在变形旋转时不会有锯齿,但是速度会慢

srcExp:图片源表达式

srcFormat:图片源格式

srcForamtExp:图片源格式表达式

srcParas:图片源参数

例子:

元素实际位置变量,可以获得元素在动画时的实际位置:actual_x actual_y

...

#_x #_y 用图片显示数字的部件

number是要显示的数字表达式

src是图片源的文件名,支持SourceAnimation

如果src="" 则会使用 number_ number_ ... 图片文件来绘制数字。类似Time部件

//srcExp:图片源表达式

+ '.png'"/>

元素动画

所有元素都支持动画

动画分为:图片源,位置,大小,旋转,透明度

每种动画相互独立,各自循环播放,动画由若干关键帧组成,关键帧包括帧属性和时间,除图片源动画外,其它动画会根据当前时间找到相邻的两个关键帧,然后线性插值计算当前的属性。 如果第一帧时间不从0开始,则默认时间为0的第一帧为图片原始属性,时间单位为毫秒。 位置动画中的位置是相对于图片自身的坐标。

例子:位置动画表示1秒从屏幕最左端到最右端,停留1秒,透明度动画表示开始透明度为175,在从最左端到最右端过程中透明度不变,到达最右端后0.5秒渐变为不透明,然后0.5秒变为透明消失。 然后循环播放。

注意:只有图片支持图片源动画

图片源动画稍有不同,没有插值,x, y 可选,表示相对图片的位置, 当前的图片是在列表里的找到第一个大于当前时间的那个点指定的

图片遮罩

x,y 坐标, src为遮罩图片,不透明黑色部分表示不透明,其他部分为透明。 align:坐标是相对于所属图片还是绝对位置,如果是相对,图片移动是遮罩会相应跟随移动。否则遮罩保持不动。

遮罩同样可以有源动画,旋转动画,和位置动画,属性支持变量表达式

category属性

界面上除解锁部件外所有元素可以指定 category属性,Charging BatteryLow BatteryFull

Normal, 指定了category属性的元素仅会在该状态下显示,可以用来做充电文字,动画等的

显示。

Slider部件

name: 名字,用来做变量名

bounceInitSpeed, bounceAccelation 回弹动画初始速度和加速度(距离单位为像素,时间单位为秒),都支持表达式

可以有任意个Slider部件。

起始点,表示点击区域,坐标和宽高,起始点中包含的元素都会跟随当前操作的拖动移动位置。

alwaysShow="true/false"

正常状态,可以包含若干元素

在点击区域按下,表示开始触发操作,拖动,隐藏其他状态元素,显示这些元素,

达到触发目标后,隐藏其他元素,显示这些元素

三个状态都可以不指定,可以使用变量来改变其他界面元素状态来表示触发过程。

Slider目的,坐标和大小,当起始点的x,y点落入EndPoint目标区域矩形时,达到触发位置,此时松开手指即可以产生触发

可以有多个触发目的

//Slider执行的动作,可以指定不同的intent

< Intent action="" type="" category="" package="" class=""/>

//Slider路径 tolerance:开始触发操作后移动时路径最大距离超过这个值则取消,回到正常状态。Path可以指定

x,y坐标,默认为0,Position的坐标为相对坐标。

例子:

Slider的intent也可以为Trigger和Command,一个Trigger可以有多个Command。

Trigger和Command请见Trigger和Command

Unlocker继承Slider,以上用法只需把tag名的Slider改为Unlocker.

解锁部件回弹动画,请见/

锁屏音效

StartPoint: normalSound, pressedSound ,指定在normal和press状态播放的音效

EndPoint: reachedSound, 到达该endpoint后播放的音效

pressedSound="sound_3">

按钮元素

按钮元素可以用来接收点击,双击等事件,并可根据trigger的定义来控制界面上其他元素。按钮元素也可以将事件传递给界面上其他元素,来使其他元素响应用户在锁屏界面上的操作。

音乐控制元素

指定名称,从而使显示与否可以由另一个按钮控制,比如双击。

必须包含4个Button和1个Text,并且name分别为指定的名称。可以包含其他任意界面元素如Image等。

属性autoShow, true/false 如果进入锁屏是在播放音乐是否自动显示MusicControl

music_state ,数字, 播放状态 0停止 1播放

visibility 数字 0=false 1=true

//专辑封面,和普通Image一样除了图片是绑定到专辑封面的,可以指定大小,加Mask等。

//歌名和歌手显示文字

//上一首按钮

音量调节

#volume_level 现在音量 #volume_level_old 调节之前的音量 取值: 1-15 根据二者比较判断是增大还是减小

#volume_type

// STREAM_VOICE_CALL = 0;

// /* The audio stream for system sounds */

// STREAM_SYSTEM = 1;

// /* The audio stream for the phone ring and message alerts */

// STREAM_RING = 2;

// /* The audio stream for music playback */

// STREAM_MUSIC = 3;

// /* The audio stream for alarms */

// STREAM_ALARM = 4;

// /* The audio stream for notifications */

// STREAM_NOTIFICATION = 5;

// /* @hide The audio stream for phone calls when connected on bluetooth */

// STREAM_BLUETOOTH_SCO = 6;

// /* @hide The audio stream for enforced system sounds in certain countries (e.g

camera in Japan) */

// STREAM_SYSTEM_ENFORCED = 7;

// /* @hide The audio stream for DTMF tones */

// STREAM_DTMF = 8;

// /* @hide The audio stream for text to speech (TTS) */

// STREAM_TTS = 9;

// /* @hide The audio stream for FM */

// STREAM_FM = 10;

一般锁屏下只能调 music 3

#volume_type>=0 表示正在调节音量,调节完毕后值为-1 可根据这个显示或隐藏音量显示

content privider

content provider支持where的格式化:

where="" whereFormat="" whereParas=""

content provider 支持依赖关系,即某个ContentProviderBinder查询结束后获取的变量作为下一个ContentProviderBinder查询的参数

name2查询结束后会触发name1的查询,name1的查询可以使用name2的变量。并且如果name2数据发生变化重新查询后,会触发name1的重新查询。

content provider提供了查询应用程序信息的通用接口,定义了新的xml代码来查询content

provider,并查询到的信息绑定到变量上,用来显示第三方应用程序的信息,只要第三方应用

提供相应的content provider。比如可以显示天气信息,邮件,待办事项,便签,等等,你也可以写一个应用程序查询任何你想要的信息并通过content provider来提供给锁屏使用。

columns="col1,col2" where="" args="" order="" countName="count_name">

VariableBinders: 定义各种变量绑定到的源,目前仅支持content provider。

ContentProviderBinder: 定义一个content provider源和绑定到它上面的变量

uri: content provider uri, 指定选用哪个content provider

uriFormat: 如果uri需要添加变量,可以用格式化,需要和uriParas一起使用

uriParas: 同Text element 的格式

columns: 需要查询的列名,用逗号分隔

where: 查询条件,同 SQL

args: "where" 的参数.

order: 排序条件, 同 SQL

countName: 将查询结构数量绑定到该变量名

Variable: 定一个绑定变量

name: 变量名

type: content provider中的数据类型: string/double/float/int/long

column: 变量绑定到的列的名称.

row: 变量绑定到的行数,默认为0.

uriFormat="content://r/weather/current/%d"

uriParas="#time_sys"

columns="iconResId,location,temperature,lowTemperature,highTemperature,description"

countName="hasweather">

align="center" format="%s %s %d℃"

paras="@weather_location,@weather_description,#weather_temperature" />

visibility="#hasweather*not(isnull(#weather_lowTemperature))*not(isnull(#weather_highTemperature))"

x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center"

format="%d℃ / %d℃" paras="#weather_lowTemperature,#weather_highTemperature"/>

visibility="#hasweather*isnull(#weather_lowTemperature)*not(isnull(#weather_highTemperature))"

x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center"

format="--℃ / %d℃" paras="#weather_highTemperature"/>

visibility="#hasweather*not(isnull(#weather_lowTemperature))*isnull(#weather_highTemperature)"

x="240" y="85" w="360" size="22" color="#FFFFFF" alpha="200" align="center"

format="%d℃ / --℃" paras="#weather_lowTemperature" />

align="center">

天气id列表:

weather_chance_of_rain = 2130837536;

weather_chance_snow = 2130837540;

weather_chance_storm = 2130837544;

weather_clear = 2130837556;

weather_cloudy = 2130837560;

weather_flurries = 2130837564;

weather_fog = 2130837568;

weather_heavy_rain = 2130837572;

weather_icy_sleet = 2130837576;

weather_mist = 2130837583;

weather_partly_cloudy = 2130837587;

weather_rain = 2130837600;

weather_snow_rain = 2130837606;

weather_snow = 2130837608;

weather_sunny = 2130837612;

weather_thunderstorm = 2130837617;

weather_unknown = 2130837621;

weather_windy = 2130837626;

//查询MIUI便签内容,显示第一条便签内容和修改时间

order="modified_date DESC" countName="note_count">

format="yyyy年MMMMdd日 hh:mm"/>

marqueeSpeed="60"

text="@note_snippet1"/>

查询未接来电的参数

uri ="content://call_log/calls";

columns = "_id,number"

where = "type=3 AND new=1";

Trigger和Command

target, 对象.animation 表示控制对象的动画

value: play,表示播放指定对象的动画

//用按钮实现开关

//每个Button中可以有若干个Command

//

//数据

//仅切换到开,用另一个button切换到关

//铃音/静音/震动

三种状态切换

下面和上面同样效果

仅正常和静音切换

仅正常和震动切换

仅切换到静音,用其他button切换到其他状态

//USB存储 toggle/on/off

//Wifi toggle/on/off

//用滑动方式实现开关

alwaysShow="true"

visibility="#usb_mode" >

状态变量,仅在添加相应command后才有效

// switch state

// 0 silent, 1 vibrate, 2 normal

#ring_mode

// 0 disabled, 1 enabled, 2 problem, 3 half(intermediate)

#wifi_state

// 0 off, 1 on, 2 half

#bluetooth_state

// 0 off, 1 on

#data_state

// 0 disconnected, 1 charge only, 2 storage, 3 intermediate

#usb_mode

Trigger的command支持变量赋值

name:变量名,expression:赋值表达式

command支持动画播放控制

动态帧率(大大降低锁屏的耗电)

1. 简单用法

除了原来的frameRate属性控制普通状态下的帧率外, 还支持分别设置充电、电量低、充满电状态下的帧率,以方便的控制这些状态下的帧率,达到省电的目标。 比如普通状态下没有动画,帧率可以设为0,充电状态下有动画,帧率可以设为30,以显示平滑的动画。普通状态下就可以非常省电

例如:

frameRateCharging="30" frameRateBatteryLow="20" frameRateBatteryFull="1"

2. 高级用法 为了在xml描述语言中根据时间线指定不同帧率,新增一种element,叫做FramerateController,此元素和其他界面元素一样可以被添加到各个容器中,此元素包含一个帧率控制时间线,指定在一定的时间使用一定的帧率。 xml看起来如下:

此元素会控制它所在容器下的时间线的帧率,即,所有该容器下的元素的动画都会与此元素指定的帧率变化同步。

所有变量

unlocker object arrtibutes: format:ty. For example:

#_x

move_x // the offset of unlocker in x direction

move_y //the offset of unlocker in y direction

move_dist //unlocker moves distance

state //unlocker state: normal:0,pressed:1,reached:2

bmp_width, bmp_height Image //element attributes

actual_x,actual_y,actual_w,actual_h // to get the actual position and size of

element in animation

music_state // the state of MusicControl player state, stop:0,play:1

* globel variables:

@next_alarm_time //string 下个闹钟时间

screen_width 屏幕宽度

screen_height 屏幕高度

raw_screen_width 未经缩放后的原始屏幕宽度

raw_screen_height

time 当前时间,long

touch_x 当前触摸点 x

touch_y 当前触摸点 y

touch_begin_x

touch_begin_y

touch_begin_time

intercept_sys_touch 是否截获以后的触摸事件,避免被其他View捕获,例如在自由桌面widget中可以防止在widget上进行触摸操作时桌面滚动和进入编辑模式。

frame_rate 当前绘图帧率

battery_level 电池电量 0-100

sms_unread_count 未读短信

call_missed_count 未接电话

// 时间日期变量

time_sys 变量,为系统当前时间毫秒数。 ampm 上下午 // 0 am, 1 pm

hour12 小时,12小时制

hour24 小时,24小时制

minute 分钟

second 秒

year 年

month 月 //0-11

date 日

day_of_week 星期 // 1-7 星期日到星期六

battery_state 电池状态: 正常:0 充电:1 电量低:2 已充满:3

#volume_type

// STREAM_VOICE_CALL = 0;

// /* The audio stream for system sounds */

// STREAM_SYSTEM = 1;

// /* The audio stream for the phone ring and message alerts */

// STREAM_RING = 2;

// /* The audio stream for music playback */

// STREAM_MUSIC = 3;

// /* The audio stream for alarms */

// STREAM_ALARM = 4;

// /* The audio stream for notifications */

// STREAM_NOTIFICATION = 5;

// /* @hide The audio stream for phone calls when connected on bluetooth */

// STREAM_BLUETOOTH_SCO = 6;

// /* @hide The audio stream for enforced system sounds in certain countries (e.g

camera in Japan) */

// STREAM_SYSTEM_ENFORCED = 7;

// /* @hide The audio stream for DTMF tones */

// STREAM_DTMF = 8;

// /* @hide The audio stream for text to speech (TTS) */

// STREAM_TTS = 9;

// /* @hide The audio stream for FM */

// STREAM_FM = 10;

#ring_mode

0 silent, 1 vibrate, 2 normal

0 disabled, 1 enabled, 2 problem, 3 half(intermediate)

#wifi_state

0 off, 1 on, 2 half

#bluetooth_state

0 off, 1 on

#data_state

// 0 disconnected, 1 charge only, 2 storage, 3 intermediate

#usb_mode

发布评论

评论列表 (0)

  1. 暂无评论