Как отобразить соединенные буквы [бенгальский язык] с помощью LWUIT в мобильном телефоне? - PullRequest
2 голосов
/ 20 апреля 2010

Я пытался разработать простое приложение J2ME с использованием LWUIT на бенгальском языке. Однако из-за интенсивного использования гласных в качестве соединенных букв на бенгальском языке у меня возникли некоторые проблемы с LWUIT.

Например, скажем, «Х» - это согласная буква, а «@» - гласный на бенгальском языке; теперь они объединяются вместе, когда это необходимо, в объединенном формате «X @». Используя LWUIT, когда я добавляю такие гласные и пытаюсь отобразить их как объединенный формат с согласной в реальном приложении, они объединяются с их предыдущей буквой (в последовательном порядке), как определено в кодировке. Интересно, что в режиме отображения / предварительного просмотра дизайнера LWUIT символы отображаются правильно.

Для получения подробной информации, пожалуйста, скачайте этот документ здесь (http://dibbaa.com/lwuit/doc/lwuit.doc) и посмотрите реальные примеры.

Буду признателен, если кто-нибудь поможет мне в этом. Просто дайте мне знать, как я могу настроить каркас LWUIT таким образом, чтобы он не комбинировал буквы, как они определены в кодировке, в последовательном порядке при их рисовании. Я использовал LWUIT версии 1.3 и шрифт «KarnaphuliP.ttf» для моего приложения.

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Я ничего не знаю о бангали и не могу найти шрифт, который вы упомянули. Но мне удалось найти альтернативный шрифт для воссоздания проблемы: «Bengali-Progoty.TTF» (который, к сожалению, немного не похож на ваш). Вы можете получить шрифт здесь: Bengali-Progoty.TTF .

Эти гласные являются особыми в том смысле, что их ширина равна нулю, и я уверен, что их исходной точкой является правая верхняя точка, а не левая верхняя. Таким образом, гласные можно рисовать поверх других предшествующих им символов.

Когда дизайнер lwuit генерирует растровый шрифт, он рисует каждый символ (что я имею в виду, символ юникода) на большом растровом изображении, вычисляет ширину текущего символа, добавляет эту ширину к текущему смещению и рисует следующий символ. Поскольку гласный имеет нулевую ширину, он будет объединен в последний не гласный символ, предшествующий ему.

Чтобы решить эту проблему, вы можете либо переключиться на шрифт Unicode (Bangali имеет место в Unicode), либо вы можете придерживаться текущего шрифта и выполнить некоторые настройки в процессе генерации шрифта.

1 Создайте собственный класс, переопределяющий класс EditorFont в редакторе lwuit.jar.
2 Переопределить EditorFont#getBitmapFont() метод, сделайте свой собственный рисунок для каждого персонажа. Вы можете проверить, является ли какой-либо символ гласным, и если это так, нарисуйте его с предшествующим пробелом.
3 Переопределить задачу Ant FontTask, предоставленную в редакторе lwuit.jar.
4 Переопределите метод FontTask#addToResources(), вставьте собственный экземпляр EditorFont вместо исходного.
5 Переопределите класс LWUITTask, добавьте метод AddXXX для поддержки переопределенного FontTask.
6 Создайте ресурс с помощью ant и используйте собственную версию LWUITTask и FontTask вместо исходной версии.
7 Поскольку гласные стали обычными символами, они будут занимать то же пространство, что и другие символы, и их больше нельзя будет рисовать поверх других символов. Вы должны нарисовать их поверх других персонажей вручную. Класс com.sun.lwuit.CustomFont, возможно, придется переопределить, чтобы правильно рисовать эти гласные.

Учитывая введенную сложность, я настоятельно рекомендую перейти на шрифт Unicode. Но, как я уже сказал, я ничего не знаю о Bangali и не могу сказать, достаточно ли использовать шрифт Unicode. Может, тебе все-таки придется сделать это нелегко.

Удачи.

0 голосов
/ 15 октября 2011

Я думаю, вам лучше реализовать собственную виртуальную клавиатуру. Существует пример в руководстве разработчика LWUIT и демо. Я уверен, что если вы потратите время на это, это пригодится позже.

...