Получить "реальную" ширину LabelField (BlackBerry)

Если я новый LabelField, как это:

LabelField label = new LabelField("long longgggg long text");

это показывает:

-----------------------
| длинный лонггг |
| длинный текст |
-----------------------

если я использую label.getWidth(), он дает ширину:

| длинный лонггг |

но мне нужна ширина:

| долго лонггг

Любое решение?

2 ответа

Проверьте getPreferedWidth(), чтобы получить длину.

Если вы применили какой-либо шрифт, чем вам нужно получить

<font object>.getAdvance(label.getText()) 

Вот метод, который я использую, чтобы получить реальную высоту метки с несколькими строками:

public int getPreferredHeight() {
        String text = getText();

        int maxWidth = getManager().getPreferredWidth();
        String[] words = StringUtilities.stringToWords(text);
        int lastWordAdvance = 0;
        int lines = 1;
        for (int i = 0; i < words.length; i++) {
            int wordAdvance = getFont().getAdvance(words[i]);
            if (lastWordAdvance + wordAdvance < maxWidth ) {
                lastWordAdvance += wordAdvance;
            } else {
                lines++;
                lastWordAdvance = wordAdvance;
            }
        }
        return (int)lines * getFont().getHeight(); 
    }

Он просматривает слова одно за другим и рассчитывает заранее, пытаясь выяснить, сколько строк действительно использует наш ярлык. Затем я использую getFont(). GetHeight() для определения общей высоты.

Вы можете использовать часть, которая рассчитывает аванс из моего примера, чтобы получить реальную ширину метки. Для этого вы можете использовать метод Math.max() для определения максимальной ширины линии.

Другие вопросы по тегам