bigbaicai

芯方式是以开云棋牌官网在线客服人、电子工程师等电子行业相关领域从业人员为核心的知识经验学习、分享、交流社群。 凭借开放、合作、共赢的运营理念,聚集了来自国内外知名院校和顶尖科技公司的开云棋牌官网在线客服人、电子工程师。 我们致力于营造专业、认真、有温度的分享交流环境,将高质量的内容和方案成规模地生产和分享,帮助个人和团队在芯方式找到有价值的Key。 http://www.icfans.com/

JAVA应用显示的字符串超出了屏幕的边界

0
阅读(1089)

[DESCRIPTION]
适用于所有版本
为什么Java Midlet显示的字符串会超出屏幕的边界?。
[SOLUTION]
问题原因:
midlet在绘制字符时需要知道何时换行,即特定屏幕宽度下一行能够显示的字符串长度。一般来说midlet会使用两种方法计算芯方式。方法一:计算每一个字符的宽度,并相加。例如打印”Hello world”,会分别计算H、e、l、l、o、空格、
w、o、r、l、d的宽度,逐个相加,当总宽度超过lcd_width时换行。方法二:直接计算字符串的宽度,当宽度超过
lcd_width时换行。例如按顺序计算”H”、”He”、”Hel”、”Hell”、”Hello”等。
字库中的字符宽度有两类,参照mmi_fe_get_string_info_param_struct。一种是单个字符的宽度pWidth,另一种是单
个字符+一小段空隙的宽度adv_w。一般来说adv_w >= pWidth。计算和绘制单个字符宽度时,使用了pWidth,而计算和
绘制字符串时宽度使用了adv_w。
发生这个问题必须满足两个开云棋牌官网在线客服条件。第一,midlet使用第一种方法计算字符串宽度。第二,字库本身adv_w > pWidth。
解决思路:
计算单个字符的宽度时,使用adv_w。
参考代码:
1. 在pixcomfontengine.c 添加函数
void Test_Get_StringWidthHeight_n(U8 *String, S32 n, S32 *pWidth, S32 *pHeight)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mmi_fe_get_string_info_param_struct query;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
memset(&query, 0, sizeof(mmi_fe_get_string_info_param_struct));
query.String = String;
query.n = n;
query.enableTruncated = MMI_FALSE;
query.w = 0;
mmi_fe_get_string_widthheight(&query);
*pWidth = query.adv_w;
*pHeight = query.adv_h;
}
2. wgui.c添加函数
S32 Test_UI_get_string_width_n(UI_string_type text, S32 n)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
S32 w, h;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
Test_Get_StringWidthHeight_n((U8*) text, n, &w, &h);
return (w);
}
3.jui_string_get_width函数中用Test_UI_get_string_width_n取代gui_get_string_width_n

Baidu
map