0

我希望我的应用程序对齐两个字段,一个向左对齐,另一个向屏幕的最左侧对齐。为此,我正在使用 GridLayoutManager 类。这是我的代码

GridFieldManager gridFieldManager = new GridFieldManager(2,2, GridFieldManager.PREFERRED_SIZE_WITH_MAXIMUM); 

gridFieldManager.add(new ButtonField("Button One"), Field.FIELD_HCENTER);  
gridFieldManager.add(new ButtonField("Button Two"), Field.FIELD_RIGHT);  

gridFieldManager.add(new ButtonField("HC", Field.FIELD_HCENTER)); 
gridFieldManager.add(new ButtonField("RT", Field.FIELD_RIGHT));

add(gridFieldManager);

而且,这是我在模拟器中的输出

在此处输入图像描述

谁能帮我把按钮二对准屏幕的最右边?任何帮助将不胜感激。

4

4 回答 4

3

基本上这都是对齐标志和网格的列属性的问题。

GridFieldManager将样式更改为Manager.USE_ALL_WIDTH并将列属性设置为GridFieldManager.AUTO_SIZE使所有可用空间在两列之间平均分配。

gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0);
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0);

下面的代码片段

GridFieldManager gridFieldManager = new GridFieldManager(2,2, Manager.USE_ALL_WIDTH); 
gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0);
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0);

gridFieldManager.add(new ButtonField("Button One"), Field.FIELD_LEFT);  
gridFieldManager.add(new ButtonField("Button Two"), Field.FIELD_RIGHT);  
gridFieldManager.add(new ButtonField("HC"), Field.FIELD_LEFT); 
gridFieldManager.add(new ButtonField("RT"), Field.FIELD_RIGHT);

add(gridFieldManager);

生产

在此处输入图像描述


这个稍作修改的代码片段

GridFieldManager gridFieldManager = new GridFieldManager(1,2, Manager.USE_ALL_WIDTH); 
gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0);
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0);

VerticalFieldManager vfmLeft = new VerticalFieldManager();
vfmLeft.add(new ButtonField("Button One", Field.FIELD_HCENTER));  
vfmLeft.add(new ButtonField("HC", Field.FIELD_HCENTER)); 
gridFieldManager.add(vfmLeft, Field.FIELD_LEFT);  

VerticalFieldManager vfmRight = new VerticalFieldManager();
vfmRight.add(new ButtonField("Button Two", Field.FIELD_HCENTER));  
vfmRight.add(new ButtonField("RT", Field.FIELD_HCENTER));
gridFieldManager.add(vfmRight, Field.FIELD_RIGHT);  

add(gridFieldManager); 

生产

在此处输入图像描述


最后,为了说明我之前所说的关于在两列之间分配可用空间的内容,下面的代码片段

GridFieldManager gridFieldManager = new GridFieldManager(1,2, Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT); 
gridFieldManager.setColumnProperty(0, GridFieldManager.AUTO_SIZE, 0);
gridFieldManager.setColumnProperty(1, GridFieldManager.AUTO_SIZE, 0);
gridFieldManager.setRowProperty(0, GridFieldManager.AUTO_SIZE, 0);

VerticalFieldManager vfmLeft = new VerticalFieldManager(Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT);
vfmLeft.setBackground(BackgroundFactory.createSolidBackground(Color.CYAN));
gridFieldManager.add(vfmLeft);  

VerticalFieldManager vfmRight = new VerticalFieldManager(Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT);
vfmRight.setBackground(BackgroundFactory.createSolidBackground(Color.GRAY));
gridFieldManager.add(vfmRight);  

add(gridFieldManager);    

产生两个大小相等的列。

在此处输入图像描述

于 2012-04-10T02:23:33.510 回答
2

看来您应该使用JustifiedHorizo ​​ntalFieldManager 而不是 GridFieldManager。JustifiedHorizo​​ntalFieldManager 不是 BlackBerry SDK 中包含的标准管理器,而是 RIM 后来发布的一组 UI 组件的成员,用于帮助开发人员构建更丰富的 UI 界面。您必须从此处下载代码,将其添加到您的项目中,然后包含以下行:

JustifiedHorizontalFieldManager justifiedManager = new JustifiedHorizontalFieldManager(buttonOne, buttonTwo, false, USE_ALL_WIDTH );
于 2012-04-04T13:38:27.157 回答
2

请使用以下课程。

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.container.HorizontalFieldManager;

public class HFMLeftFieldRightField extends HorizontalFieldManager {

 private Field leftField;
 private Field rightField;

 private final static int TOP_MARGIN = 0;
 private final static int LEFT_MARGIN = 30;

 public HFMLeftFieldRightField() {
  super(USE_ALL_WIDTH);
 }

 public HFMLeftFieldRightField(boolean isQatari) {
  super(USE_ALL_WIDTH | Field.FIELD_LEFT);
 }

 public void sublayout(int maxWidth, int maxHeight) {

  super.sublayout(maxWidth, maxHeight);
  int width = getWidth();

  if (rightField != null) {
   int x = width - rightField.getWidth() - LEFT_MARGIN;
   int y = TOP_MARGIN;
   setPositionChild(rightField, x, y);
  }
  if (leftField != null) {
   int y = TOP_MARGIN+rightField.getHeight()/5;
   int x = LEFT_MARGIN;
   setPositionChild(leftField, 0, y);
  }

  setExtent(maxWidth, rightField.getHeight() + TOP_MARGIN * 2);
 }

 public void setLeftButton(Field leftField) {
  this.leftField = leftField;
super.add(leftField);
 }

 public void setRightButton(Field rightField) {
  this.rightField = rightField;
  super.add(rightField);
 }


}

并以这种方式添加字段。

HFMLeftFieldRightField hfm = new HFMLeftFieldRightField();
hfm.setLeftButton(new EditField("Left"));
hfm.setRightButton(new EditField("Right"));
add(hfm);

更多详情http://keraisureshvblackberry.blogspot.in/2012/02/there-are-very-common-there-there-are.html

希望有帮助..

于 2012-04-04T14:05:51.097 回答
0

将 gridFieldManager 构造函数的样式参数更改为 GridFieldManager.USE_ALL_WIDTH

应该是这样的

GridFieldManager gridFieldManager = new GridFieldManager(2,2,GridFieldManager.USE_ALL_WIDTH ); 
于 2012-04-04T12:45:08.353 回答