BlackBerry Горизонтальная прокрутка в TreeField или ListField - PullRequest
2 голосов
/ 13 марта 2010

Я работаю над приложением, которому требуется текст, размер которого больше видимого размера экрана в TreeField и ListField. Как вы знаете, обратные вызовы TreeField и ListField поддерживают только graphics.drawText (), поэтому я не могу добавить экземпляр поля в строку.

У кого-нибудь есть метод прокрутки по горизонтали после видимого размера текста?

Может быть, есть прокручиваемая панель, которая будет работать? Я знаю о трюке NullField (Field.Focusable), но он не будет работать в поле списка.

Наконец, я знаю, что тип экрана отличается, так как FullScreen и MainScreen используют VerticalFieldMangers. Поэтому сейчас я использую PopupScreen для моего тестирования.

Заранее спасибо за ваше время.

1 Ответ

1 голос
/ 16 марта 2010

Может быть, лучше разбить текст на две строки и установить высоту строки 2 x высота шрифта (+ поля)?

альтернативный текст http://img219.imageshack.us/img219/5802/listh.jpg

class Scr extends MainScreen implements ListFieldCallback {
    int DISPLAY_WIDTH = Display.getWidth();
    Vector mItems = new Vector();   
    ListField mListField = new ListField();

    public Scr() {
        mListField.setCallback(this);
        add(mListField);
        mItems.addElement("Lorem ipsum dolor sit amet, ");
        mItems.addElement("Lorem ipsum dolor sit");
        mItems.addElement("Lorem ipsum dolor sit amet, "+
            "consectetuer adipiscing elit");
        mItems.addElement("Lorem ipsum dolor sit amet, "+
            "consectetuer adipiscing elit, sed diam "+
                "nonummy nibh euismod");
        mItems.addElement("Lorem ipsum dolor sit amet, "+
            "consectetuer adipiscing elit");
        mItems.addElement("Lorem ipsum dolor sit amet, ");
        mListField.setSize(mItems.size());
        mListField.setRowHeight(
                mListField.getFont().getHeight()*2 + 4);        
    }

    public void drawListRow(ListField field, Graphics g, 
        int i, int y, int w) {
        // Draw the text.
        String text = (String) get(field, i);        
        if(g.getFont().getAdvance(text) > w)
        {
            int index = 0;
            while(g.getFont().getAdvance(text.substring(0, index)) < w)
            {
                index++;
            }
            g.drawText(text.substring(0, index), 0, y, 0, w);
            g.drawText(text.substring(index, text.length()-1), 0, 
            y + g.getFont().getHeight()+ 4, DrawStyle.ELLIPSIS, w);
        }
        else
        {
            g.drawText(text, 0, y, 0, w);
        }
    }       

    public Object get(ListField listField, int index) {
        return mItems.elementAt(index);
    }

    public int getPreferredWidth(ListField listField) {
        return DISPLAY_WIDTH;
    }

    public int indexOfList(ListField listField,
        String prefix, int start) {
        return 0;
    }
}
...