高通告诫我们:程序一定要多多在手机上调试。
刚入门时,觉得模拟器是个好东西,显示逼真,想调就调。逐渐地,我发现,在模拟器上调试好的程序,在手机上并不一定能按预计运行。
反差最大的莫过于界面,第一次把程序拷到手机上,期望很大,也很自信,结果——惨不忍睹。
以下是我给大家的一些建议:
1.显示中文时,不要直接在屏幕上打印,把中文文字放在资源(bar)文件里。
//在屏幕上直接打印中文,在手机上会变成乱码
//资源文件便于修改,同时提高程序的可移植性
//修改brx文件后,要重新编译生成新的bar
2.显示文字时,不要固定行高,根据屏幕行高计算合适的显示行高。
//不同的屏幕行高不一样,如果设为固定值,在有的屏幕上文字重叠,有的屏幕文字稀疏。显示行高设为屏幕行高时,是最密的显示,如果有需要,可以适当加宽
//用IDISPLAY_GetFontMetrics得到屏幕行高
3.显示非居左、非居右文字时,通过IDISPLAY_MeasureTextEx得到前段文字的长度,适当调整得到显示的起始位置。
//通过IDISPLAY_DrawText中的x、y参数控制文字的显示位置。x是距屏幕右边的像素,y是本行的上边距离屏幕上边的像素
//重要提示:IDISPLAY_DrawText函数在模拟器上和在手机上的返回值可能不一样!所以请多多调试!给一组数据:字符串“垂直速度:”(加粗)在模拟器上宽度为83像素,手机上是180像素。
4.AEERect限定的区域里,即使没显示内容,也会盖住已显示的文字
//帮助里说IDF_TEXT_TRANSPARENT可以避免覆盖,大家可以试试
5.文字自动换行
//每个应用都有说明、关于,所以自动换行肯定需要。
代码如下:
while ((totalCh > 0) && (*psz != NULL))
{
// 获取一行中可容纳字符数的信息
pixelWidth = IDISPLAY_MeasureTextEx(pMe->m_pIDisplay, font, (AECHAR *) psz, -1, di.cxScreen - 5, &pnFits);
IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_NORMAL, psz, pnFits, 5, dy, 0, 0);
psz += pnFits; // 将指针移到下一个要显示的段
totalCh -= pnFits; // 减少仍需要显示的字符总数
dy += charHeight; // 将下一行置于上一行的charHeight像素以下。
IDISPLAY_Update(pMe->m_pIDisplay);
if (totalCh < pnFits)
pnFits = totalCh; // 如果总数小于 pnFits, 则调整 pnFits
}
6.AEERect中数字、字符串显示差异
//在模拟器中,数字居左,字符串居中
//在我们的手机上,数字数字居左,字符串居右。我对此无奈,还没找到控制的方法。
显示与OEM有关,我遇到的问题不一定大家会遇到,仅供参考:)