我对班加利一无所知,我找不到你提到的字体。但我设法获得了一种替代字体来重现问题:“Bengali-Progoty.TTF”(不幸的是,它与你的有点相似)。您可以在此处获取字体:Bengali-Progoty.TTF。
这些元音很特别,因为它们的宽度为零,我敢打赌它们的原点是右上点,而不是左上点。这样,元音可以绘制在它们前面的其他字符之上。
当 lwuit 设计器生成位图字体时,它会将每个字符(我的意思是 unicode 字符)绘制到一个大位图上,计算当前字符的宽度,将该宽度添加到当前偏移量,然后绘制下一个字符。由于元音的宽度为零,它将被组合到它前面的最后一个非元音字符中。
要解决这个问题,您可以切换到 unicode 字体(Bangali 在 unicode 中占有一席之地),也可以坚持使用当前字体并对字体生成过程进行一些自定义工作。
1创建您自己的类EditorFont
,覆盖lwit 的editor.jar 中的类。
2 OverrideEditorFont#getBitmapFont()
方法,自己绘制每个字符。您可以测试任何字符是否是元音,如果是,则用前面的空格绘制它。
3覆盖FontTask
lwit 的editor.jar 中提供的Ant 任务。
4覆盖该FontTask#addToResources()
方法,插入您自己的EditorFont 实例而不是原始实例。
5重写 LWUITTask 类,添加一个AddXXX
方法来支持您重写的 FontTask。
6使用ant构建资源,使用自己版本的LWUITTask和FontTask代替原来的版本。
7由于元音已成为常规字符,它们将占用与其他字符相同的空间,并且不能再绘制在其他字符之上。您必须手动将它们绘制在其他字符之上。com.sun.lwuit.CustomFont
为了正确绘制这些元音,可能必须重写该类。
鉴于引入的复杂性,我强烈建议切换到 unicode 字体。但正如我所说,我对 Bangali 一无所知,也无法判断使用 unicode 字体是否足够。也许你毕竟必须以艰难的方式去做。
祝你好运。