界面在手机和模拟器上显示的差异

来源:互联网 发布:人工智能体验馆 南京 编辑:程序博客网 时间:2024/05/02 11:12

 

 

    高通告诫我们:程序一定要多多在手机上调试。

    刚入门时,觉得模拟器是个好东西,显示逼真,想调就调。逐渐地,我发现,在模拟器上调试好的程序,在手机上并不一定能按预计运行。
    反差最大的莫过于界面,第一次把程序拷到手机上,期望很大,也很自信,结果——惨不忍睹。

    以下是我给大家的一些建议:

    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有关,我遇到的问题不一定大家会遇到,仅供参考:)