2

我一直在尝试使用孟加拉语的 LWUIT 开发一个简单的 J2ME 应用程序。但是,由于在孟加拉语中大量使用元音作为连词,我在使用 LWUIT 时遇到了一些问题。

例如,假设“X”是辅音字母,“@”在孟加拉语中用作元音;现在它们在需要时组合在一起,成为一种组合格式“X@”。使用 LWUIT,当我添加此类元音并尝试在实际应用程序中将它们显示为带有辅音的组合格式时,它们会与字符集中定义的前一个字母(按连续顺序)组合。虽然有趣的是,在 LWUIT 设计器显示/预览中,字符显示正确。

有关详细信息,请在此处下载此文档(http://dibbaa.com/lwuit/doc/lwuit.doc)并查看实际示例。

如果有人能帮助我解决这个问题,我将不胜感激。让我知道如何以这样的方式设置 LWUIT 框架,这样它就不会在绘制它们时按连续顺序组合字符集中定义的字母。我的应用程序使用了 LWUIT 1.3 版和字体“KarnaphuliP.ttf”。

谢谢

4

2 回答 2

2

我对班加利一无所知,我找不到你提到的字体。但我设法获得了一种替代字体来重现问题:“Bengali-Progoty.TTF”(不幸的是,它与你的有点相似)。您可以在此处获取字体:Bengali-Progoty.TTF

这些元音很特别,因为它们的宽度为零,我敢打赌它们的原点是右上点,而不是左上点。这样,元音可以绘制在它们前面的其他字符之上。

当 lwuit 设计器生成位图字体时,它会将每个字符(我的意思是 unicode 字符)绘制到一个大位图上,计算当前字符的宽度,将该宽度添加到当前偏移量,然后绘制下一个字符。由于元音的宽度为零,它将被组合到它前面的最后一个非元音字符中。

要解决这个问题,您可以切换到 unicode 字体(Bangali 在 unicode 中占有一席之地),也可以坚持使用当前字体并对字体生成过程进行一些自定义工作。

1创建您自己的类EditorFont,覆盖lwit 的editor.jar 中的类。
2 OverrideEditorFont#getBitmapFont()方法,自己绘制每个字符。您可以测试任何字符是否是元音,如果是,则用前面的空格绘制它。
3覆盖FontTasklwit 的editor.jar 中提供的Ant 任务。
4覆盖该FontTask#addToResources()方法,插入您自己的EditorFont 实例而不是原始实例。
5重写 LWUITTask 类,添加一个AddXXX方法来支持您重写的 FontTask。
6使用ant构建资源,使用自己版本的LWUITTask和FontTask代替原来的版本。
7由于元音已成为常规字符,它们将占用与其他字符相同的空间,并且不能再绘制在其他字符之上。您必须手动将它们绘制在其他字符之上。com.sun.lwuit.CustomFont为了正确绘制这些元音,可能必须重写该类。

鉴于引入的复杂性,我强烈建议切换到 unicode 字体。但正如我所说,我对 Bangali 一无所知,也无法判断使用 unicode 字体是否足够。也许你毕竟必须以艰难的方式去做。

祝你好运。

于 2010-04-30T12:56:23.673 回答
0

我认为您实现自己的虚拟键盘可能会更好。LWUIT 开发人员指南和演示中有一个示例。我敢肯定,如果你花时间,它会在以后派上用场。

于 2011-10-15T00:12:08.897 回答