Как вы заверните слово RichTextField для Blackberry? - PullRequest
1 голос
/ 27 апреля 2010

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

---------------------------
| address is | ***********|
| very long  | ** IMAGE **|
| state, zip | ***********|
---------------------------

Где адрес - это отдельная строка, отдельная от города и почтового индекса. Я изменяю поле адреса следующим образом:

RichTextField addrField = new RichTextField(address) {
    public int getPreferredWidth() { 
     return 200; 
    }

    protected void layout(int maxWidth,int maxHeight) {
     super.layout(getPreferredWidth(),maxHeight);
     setExtent(getPreferredWidth(), getHeight());
    }
};

Результаты выглядят так:

-----------------------------
| address is ve| ***********|
| state, zip   | ** IMAGE **|
|              | ***********|
-----------------------------

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

Мне не удалось найти прямой ответ в Интернете. Я нашел людей, которые говорили, что вам нужно сделать это в собственном менеджере компоновки, некоторые ссылаются на RichTextField API, который бесполезен. Но на самом деле никто не упоминает, как это сделать.

Я понимаю, что мне может понадобиться читать символ за символом и указывать, где должен произойти разрыв строки. Чего я не знаю, так это как именно это сделать. Вы не можете просто считать символы и предполагать, что каждый стоит 5 пикселей, и вам не нужно это делать. Конечно, должен быть какой-то способ достичь этого таким образом, который имеет смысл.

Есть предложения?

1 Ответ

0 голосов
/ 27 апреля 2010

У меня нет точного решения вашей проблемы, но в плане измерения ширины текста, если у вас есть ссылка на объект Font для шрифта, используемого в вашем поле, вы можете вызвать Font. getAdvance () , чтобы получить ширину указанного текста в пикселях. Это может помочь, если вам нужно вставить разрывы текста вручную.

...