2010-12-14 5 views

ответ

8

Вам необходимо переопределить метод компоновки данного поля, чтобы установить размер для вас:

protected void layout(int width, int height) 
{ 
    super.layout(customWidth, customHeight); 
    setExtent(customWidth, customHeight); 
} 

где customWidth и customHeight были установлены вами в другом месте.

  • super.layout(customWidth, customHeight) лежит на поле, чтобы использовать специальную ширину & высоту.

  • setExtent(customWidth, customHeight) устанавливает размер поля на экране.


Вы можете сделать это, когда вы объявите свой EditField, используя код, похожий на приведенный ниже код:

final int customWidth = Display.getWidth(); 
final int customHeight = 30; 

Field myEditField = new EditField() 
{ 
    protected void layout(int width, int height) 
    { 
     super.layout(customWidth, customHeight); 
     setExtent(customWidth, customHeight); 
    } 

}; 
+0

Вместо: поле myEditField = новый EditField() Должно быть: EditField myEditField = новый EditField() – Sarang

+0

@Sarang Это зависит от того, что вы хотите сделать, помните, что 'EditField' является подклассом' Field'. –

3

Вы также можете Пейс поле редактирования внутри horizontalFieldmanager и переопределить метод sublayout к установить высоту и ширину горизонтального поля для установки высоты & ширина поля редактирования

+0

переопределение 'sublayout()' своего рода поражения от использования 'HorizontalFieldManager' (по сравнению с просто расширением' Manager'). Я также видел много странных проблем, когда люди это делали. В общем, если людям действительно нужен прекрасный контроль над макетами, они должны либо решить, что это работа Менеджера, либо подкласс «Менеджер», либо решить, что это неотъемлемое свойство дочернего поля «Поле», и делать то, что предлагает Ричард. – Nate

1
  • Примечание 1: Вы не можете установить ширину и высоту для editField
  • Примечание 2: Вы можете использовать только метод sublayout в менеджере
  • Примечание 3: Если добавить editField на экран будет заполнить всю доступную ширину от начала до конца экрана

Вы можете использовать эту идею, поставив несколько полей в левой части и положив editField в последнюю очередь.

Или вы можете использовать приведенный ниже код.

Вы установить ширину и высоту как менеджер и поле редактирования и попытаться поставить их на экране:

HorizontalFieldManager containerManager = new HorizontalFieldManager() { 
    public int getPreferredHeight() { 
     return super.getPreferredHeight(); 
    } 

    public int getPreferredWidth() { 
     return super.getPreferredWidth(); 
    } 

    protected void sublayout(int maxWidth, int maxHeight) { 
     setExtent(getPreferredWidth(), getPreferredHeight()); 
     super.sublayout(getPreferredWidth(), getPreferredHeight()); 
    } 
}; 


EditField editField = new EditField(Field.FIELD_VCENTER) { 
    public int getPreferredHeight() { 
     // TODO Auto-generated method stub 
     return super.getPreferredHeight(); 
    } 

    public int getPreferredWidth() { 
     // TODO Auto-generated method stub 
     return super.getPreferredWidth(); 
    } 
}; 
0

Другим способом изменить высоту в EditField является возился с прокладкой около границ:

EditField emailField = new EditField("", "optional initial text"); 

XYEdges xyEdge = new XYEdges(2, 2, 2, 2); 
XYEdges xyEdgeColors = new XYEdges(0x00dddddd, 0x00dddddd, 0x00dddddd, 0x00dddddd); 
Border aBorder = BorderFactory.createSimpleBorder(xyEdge, xyEdgeColors, Border.STYLE_SOLID); 

emailField.setBorder(aBorder); 
emailField.setPadding(10, 5, 5, 10);