2011-04-27 1 views
0

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

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

Любая идея?

Благодаря

ответ

2

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

+0

Спасибо большое! Как новичок в SDK BlackBerry, я должен сказать, что я в замешательстве. Спасибо – Vincent

+0

Рад, что я мог помочь! – jprofitt

+0

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^