Blackberry EditField - изменение высоты не эффективно - PullRequest
0 голосов
/ 27 апреля 2011

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

public class CMainManager extends HorizontalFieldManager
{
    EditField mtxt=new EditField(EditField.FOCUSABLE | EditField.FILTER_DEFAULT);

    /* Constructeur */
    public CMainManager()
    {
        add(mtxt);
    }

     public int getPreferredHeight()
     {
          return Display.getHeight();
    }

    public int getPreferredWidth()
    {
          return Display.getWidth();
    }

    protected void sublayout(int width, int height)
    {
        layoutChild(mtxt, 50, 500);
        setPositionChild(mtxt, 0, 10);
        mtxt.setBackground(
                BackgroundFactory.createSolidBackground(0x000000FF));

        setExtent(width, height);
    }
}

Строка layoutChild (mtxt, 50, 500); должен установить ширину и высоту моего EditField. Это так, но только с шириной. Высота постоянна. Если я установлю его на 500, я получу тот же результат, как если бы я установил его на 10.

Есть идеи о том, что мне не хватает? потому что я уверен, что это глупая ошибка, которую я делаю ...

Спасибо

== редактировать

После помощи jproffit я понял, что сделал не так. Однако теперь, когда это работает (я могу установить высоту), у меня есть другая проблема. Вот мне код:

private EditField m_Txt=new EditField(EditField.FOCUSABLE |
                                        EditField.FILTER_DEFAULT) {
    protected void layout(int width, int height)
    {
        setExtent(Display.getWidth(), m_TxtHeight);
    }
    public boolean isFocusable()
    {
        return true;
    }

    protected void onFocus(int direction)
    {
        super.onFocus(direction);
        invalidate();
    }

    protected void onUnfocus() {
        super.onUnfocus();
        invalidate();
    }
};

С этим кодом я не могу правильно управлять фокусировкой. Что я забыл? Я не вижу курсора в своем поле.

Есть идеи?

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Вы не указываете размеры, которые вы берете, вы указываете максимальное количество места, которое он может занять. Поэтому, когда вы говорите 10, 50 или 500, если хотите использовать только высоту 8, это все, что будет. Вам придется переопределить layout() в EditField, если вы хотите также контролировать его размеры.

0 голосов
/ 01 декабря 2011

Попробуйте сделать так создать собственное поле редактирования и внутри метода макета

_editField = new EditField("", initialValueOfTextField) 
    {
        protected void layout(int maxWidth, int maxHeight) 
        {
          int myWidth = getMaxSize() * getFont().getAdvance("W");// define your req width
          int myHeight= 50 // your required height
          super.layout(myWidth, myHeight);
       }
   };
...