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里面评估一下是否可以加入