LabelField отличается поведением между OS 4.5 и 6.0 - PullRequest
0 голосов
/ 08 февраля 2012

В моем приложении мне пришлось реализовать пользовательский компонент, который расширен от VerticalFieldManager, и этот менеджер содержит строки, которые являются HorizontalFieldManager. Проблема в OS 4.5. LabelField слева показывает только одну строку текста. Вот код и изображения. BB6.0 enter image description here

class Row extends HorizontalFieldManager{
    private LabelField key;
    private LabelField value;

    public Row(String left,String right){
        key = new LabelField(left + ": ",Field.NON_FOCUSABLE | Field.NON_SPELLCHECKABLE | TextField.NO_LEARNING | RichTextField.USE_TEXT_WIDTH){
            public int getPreferredWidth() {
                return Math.min((Display.getWidth()-20)/2,super.getPreferredWidth());
            }
        };
        key.setPadding(0, 0, 0, 10);
        key.setFont(Fonts.NORMAL);
        add(key);

        value = new LabelField(right,Field.NON_SPELLCHECKABLE | TextField.NO_LEARNING | Field.FOCUSABLE);
        value.setPadding(0, 10, 0, 0);
        value.setFont(Fonts.BOLD);
        add(value);
    }
    public int getPreferredHeight() {
        return Math.max(key.getHeight(), value.getHeight());
    }
    public int getPreferredWidth() {
        return Display.getWidth()-20;
    }
    protected void sublayout(int arg0, int arg1) {
        super.sublayout(arg0, arg1);
        setExtent(getPreferredWidth(), getPreferredHeight());
    }
}

1 Ответ

1 голос
/ 08 февраля 2012

Я решил проблему, поместив LabelFields в VFM и переопределив getPreferredHeight() и sublayout() методы, как показано ниже. Спасибо Мистер Смит .

class Row extends HorizontalFieldManager{
    private LabelField key;
    private LabelField value;

    public Row(String left,String right){
        VerticalFieldManager leftVfm = new VerticalFieldManager(){
            public int getPreferredWidth() {
                return Math.min(getField(0).getPreferredWidth(), (Display.getWidth())/2);
            }
            protected void sublayout(int maxWidth, int maxHeight) {
                super.sublayout(getPreferredWidth(), maxHeight);
                setExtent(getPreferredWidth(), maxHeight);
            }
        };
        VerticalFieldManager rightVfm = new VerticalFieldManager();

        key = new LabelField(label.getLabel() + ": ",Field.FOCUSABLE);
        key.setFont(Fonts.NORMAL);
        leftVfm.add(key);

        value = new LabelField(label.getRight(),Field.FOCUSABLE);
        value.setFont(Fonts.BOLD);
        rightVfm.add(value);

        add(leftVfm);
        add(rightVfm);
    }
    public int getPreferredHeight() {
        if (key != null)
            return Math.max(key.getHeight(), value.getHeight());
        else{
            return value.getHeight();
        }
    }
    public int getPreferredWidth() {
        return Display.getWidth()-20;
    }
    protected void sublayout(int arg0, int arg1) {
        super.sublayout(arg0, arg1);
        setExtent(getPreferredWidth(), getPreferredHeight());
    }
}
...