1、超出一行宽度仅显示半个中文的问题,要自己通过脚本去实现控制,目前汉字是16X16,ascii可见字符是8X16,可参考如下代码自己控制换行(注意下面的代码,CHAR_WIDTH是6,你需要改成8)
--1个ASCII字符宽度为6像素,高度为12像素;汉字宽度和高度都为12像素
CHAR_WIDTH = 6
--- 按照布局显示文本字符串.
-- @string text,文本字符串,GB2312编码
-- @number yOffset,在LCD上显示第一行文本的y坐标
-- @number rowSpace,相邻两行文本的显示间隔
-- @number rowMaxBytes,每行文本显示的最大字节数
-- @number maxRows,每屏最多显示的行数,此值为0xFFFF时,并不在lcd上显示文本字符串
-- @string[opt="LEFT"] align,对齐方式:LEFT表示靠左,CENTER表示居中
-- @return rmnText,未处理的文本字符串,GB2312编码
-- @return dispRows,实际显示的行数
-- @usage
-- layout.dispText("抱歉!激活失败请重试",23,6,14,2,"CENTER")
-- layout.dispText("雾霾橙色预警仍生效。市教委紧急下发通知,除了要求一切学校停止户外活动外,还要求中学停止室外体育课、早操、课间操、课外体育活动、业余训练。在持续橙色预警期间,许可中小学校根据区域空气质量状况和学生、家长的要求,经市、区教委批准后弹性安排教学活动",42,4,18,7)
function dispText(text,yOffset,rowSpace,rowMaxBytes,maxRows,align)
align = align or "LEFT"
local rowTextStart,rowTextEnd,curRow,i = 1,rowMaxBytes
for curRow=1,maxRows do
local asciiCnt = 0
i = rowTextStart
while i<=rowTextEnd do
if i>text:len() then rowTextEnd=text:len() break end
if text:byte(i)>0x7F then
i = i+2
else
i = i+1
asciiCnt = asciiCnt+1
end
end
if asciiCnt%2==1 and rowTextEnd-rowTextStart+1>=rowMaxBytes then rowTextEnd=rowTextEnd-1 end
if maxRows~=0xFFFF then
disp.puttext(text:sub(rowTextStart,rowTextEnd),
(lcd.WIDTH-((align=="LEFT" and rowMaxBytes or (rowTextEnd-rowTextStart+1))*CHAR_WIDTH))/2,
yOffset+(curRow-1)*(CHAR_WIDTH*2+rowSpace))
end
if rowTextEnd>=text:len() then
return "",curRow
end
rowTextStart,rowTextEnd = rowTextEnd+1,rowTextEnd+rowMaxBytes
end
return text:sub(rowTextEnd-rowMaxBytes+1,-1),curRow
end
2、不支持二级汉字的问题,我们在0028的lod里面评估一下是否可以加入
