0

我有一个看似简单的问题:

我想使用水平字段管理器创建 7 个复选框(一周中的几天)排列在 1 行上。不幸的是,默认情况下,CheckboxField 占据了整行。由于这个原因, CheckboxField 应该(并且根据它所做的 javadoc)有一个样式设置,使它只使用它需要的宽度。但是,我的编译器(Eclipse 插件)无法识别“CheckboxField.NO_USE_ALL_WIDTH”并且不会编译/打包我的应用程序。

CheckboxField 声明:

private CheckboxField   cf_sun,
                        cf_mon,
                        cf_tue,
                        cf_wed,
                        cf_thu,
                        cf_fri,
                        cf_sat;

我将我的复选框定义如下:

cf_sun = new CheckboxField("Sun", false, CheckboxField.NO_USE_ALL_WIDTH); // <-- ERROR
        cf_mon = new CheckboxField("Mon", false);
        cf_tue = new CheckboxField("Tue", false);
        cf_wed = new CheckboxField("Wed", false);
        cf_thu = new CheckboxField("Thu", false);
        cf_fri = new CheckboxField("Fri", false);
        cf_sat = new CheckboxField("Sat", false);

我怎样才能使这项工作?

4

1 回答 1

3

根据CheckboxField 上的 BlackBerry Javadocs

NO_USE_ALL_WIDTH

public static final long NO_USE_ALL_WIDTH

使用此样式表示字段应仅使用必要的水平空间。

另请参阅:常量字段值

: 黑莓 API 7.0.0

您是否根据SDK 7.0库构建您的应用程序?或者更低的东西?如果您使用低于 7.0 的版本,那么编译器(正确地)将找不到该新常量。

无论如何,我在 OS 5.0 上尝试了您的代码CheckboxField如果您将它们全部添加到HorizontalFieldManager. 但是,假设您确实需要对字段宽度进行更多控制......

幸运的是,看起来您的布局非常简单。您的所有字段标签的长度都相同(3 个字符),因此您可能只需创建一个设置宽度的新子类。如果您希望它更加动态,那么您可以Font.getAdvance()在复选框标签上使用来确定每个标签的确切宽度,因此,每个字段需要多少空间(当然也要考虑复选框的宽度)。

private class MyCheckboxField extends CheckboxField {

  public MyCheckboxField(String label, boolean value) {
     super(label, value);
  }

  public int getPreferredWidth() {
     // 32 is just a constant to account for the checkbox itself ... 
     // ... make this whatever you like
     return getFont().getAdvance(getLabel()) + 32;
  }

  protected void layout(int width, int height) {
     super.layout(getPreferredWidth(), height);
     setExtent(getPreferredWidth(), getPreferredHeight());
  }

}

进而

cf_mon = new MyCheckboxField("Mon", false);
于 2012-11-10T04:59:48.083 回答