2012-02-27 44 views
0

我需要更改ButtonField的大小。它位于一个VerticalFieldManager内,它是MainPage中唯一的VFM。设置ButtonField的高度

我已经成功地改变了它的宽度(覆盖setPreferredWidth()就足够了)。不过,我在更改高度时遇到问题。

直到现在,我重写了setPreferredHeight(),它没有做任何事情。我试着重写布局像这样(试行评论的所有排列):

protected void layout(int arg0, int arg1) 
{ 
    //super.layout(myDesiredWidth, myDesiredHeight); 
    //setExtent(myDesiredWidth, myDesiredHeight); 
} 

我自己也尝试了经理(衡工量值式)的覆盖sublayout这样的:

protected void sublayout(int arg0, int arg1) 
{ 
    super.sublayout(arg0, arg1); 
    ButtonField myButton = (ButtonField)getField(1); 
    layoutChild(myButton,myDesiredWidth,myDesiredHeight); 
} 

这没”工作。我仍然不确定这些布局和子布局方法如何在后台工作,但我确定有人需要在我之前更改按钮的大小。

编辑:我会更具体。我正在使用BB JRE 6.0并重写getPreferredHeight()和layout()是越野车(改变高度会极大地改变宽度,我的按钮周围的其他字段会丢失它们的文本等)。我尝试了BB JRE 5.0并且增加了工作高度,但是减少了工作。无论如何,我搜索了很多,我找不到明确的答案,我想我必须创建自己的自定义字段并从头开始实施绘图方法。

回答

1

看到该样品等级:

public class Abc extends MainScreen 
{ 
ButtonField clickButton; 
public Abc() 
{ 
    createGUI();  
} 
public void createGUI() 
{ 
    clickButton=new ButtonField("Click Here", Field.FIELD_HCENTER) 
    { 
     protected void layout(int width, int height) 
     { 
      setExtent(200, 80); 
     } 
    }; 
    add(clickButton);     
} 
} 

我得到这样的形象:

Size of button

使用按照您的要求;

+0

在你的情况,除了按钮本身,你什么都没有。在我的情况下,我有这些:MainPage - > VMF - > HFM,Button,HFM,HFM。当我重写layout()并使用setExtent()时,其虚拟机无法正确设置布局。 – mostruash 2012-02-27 21:04:29

+1

Somany VFM或HFM无关紧要,如果您想对特定的labelField,buttonField,HFM或任何字段执行某些操作,那么您应该使用它们的覆盖方法;然后仅适用于特定字段; – alishaik786 2012-02-28 04:11:52

1

黑莓屏幕的工作原理如下。

  1. 屏幕的代理管理器自行布局。
  2. 代表经理要求其他领域和经理布置。
  3. 添加到代理经理的经理列出自己并要求其子域或经理进行布局。
  4. 此过程继续,直到所有的字段布局。

你想布局一个按钮字段,这是一个管理器的一部分。根据以上规则,您必须仅覆盖按钮字段的布局方法。正如alishaik786所说,你不必布置经理或除buttonField以外的其他任何东西。

自定义按钮场的一个简单的例子,这里给出的http://www.coderholic.com/blackberry-custom-button-field/

如果你看一下,你可以看到下面的overrided方法所必需的布局领域本身

public int getPreferredWidth() 
{ 
    return fieldWidth; 
} 

public int getPreferredHeight() 
{ 
    return fieldHeight; 
} 

protected void layout(int arg0, int arg1) 
{ 
    setExtent(getPreferredWidth(), getPreferredHeight()); 
} 

代码一旦在构造函数中设置了fieldWidthfieldHeight,则可以分别返回getPreferredWidth()getPreferredHeight()的值。

领域的layout()被调用时,当现场被布置,将现场的程度设定为fieldWidthfieldHeight