Поле редактирования Blackberry — изменение высоты неэффективно

#blackberry #height #blackberry-editfield

#ежевика #высота #blackberry-поле редактирования

Вопрос:

Что я пытаюсь сделать, так это просто изменить высоту 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();
    }
};
  

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

Есть идеи?

Спасибо

Ответ №1:

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

Комментарии:

1. Большое спасибо! Как новичок в разработке BlackBerry SDK, я должен сказать, что я запутался в этом. Спасибо

2. Я отредактировал свой вопрос, потому что столкнулся с другой проблемой из-за исправления. Есть идеи? Спасибо.

3. Попробуйте вызвать super.layout() , а затем ваш setExtent()

Ответ №2:

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

 _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);
       }
   };