我是使用 Java BlackBerry SDK 开发的新手。
我想创建一个ObjectChoiceField
全屏宽度的自定义,并将标签放在它的左上角。
我怎样才能做到这一点?
我是使用 Java BlackBerry SDK 开发的新手。
我想创建一个ObjectChoiceField
全屏宽度的自定义,并将标签放在它的左上角。
我怎样才能做到这一点?
这是一种hack,但您可以通过以下方式完成此操作:
为 中的选项(字符串)添加空间ObjectChoiceField
,以便将它们分隔为全屏宽度。
只需在自定义上方添加一个单独LabelField
的管理器。 ObjectChoiceField
像这样:
public class FullWidthChoiceField extends ObjectChoiceField {
private Object[] _choices; // cached for convenience
private int _orientation; // track device orientation
public void setChoices(Object[] choices) {
// TODO: this pixel value may need some tweaking!
final int HBUFFER_PX = 62;
int desiredWidth = Display.getWidth() - getPaddingLeft() - getPaddingRight()
- getMarginLeft() - getMarginRight() - HBUFFER_PX;
Font font = getFont();
int advanceOfOneSpace = font.getAdvance(' ');
for (int c = 0; c < choices.length; c++) {
String trimmedChoice = ((String)choices[c]).trim();
// how wide is the text for this choice?
int advance = font.getAdvance(trimmedChoice);
int numSpacesToPad = Math.max(0, (desiredWidth - advance) / advanceOfOneSpace);
char[] pad = new char[numSpacesToPad];
Arrays.fill(pad, ' ');
choices[c] = new String(pad) + trimmedChoice; // pad to left of choice
}
_choices = choices;
super.setChoices(choices);
}
// only needed if your app supports rotation!
protected void layout(int width, int height) {
super.layout(width, height);
if (_orientation != Display.getOrientation()) {
// orientation change -> we must readjust the choice field
_orientation = Display.getOrientation();
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
setChoices(_choices);
}
});
}
}
}
并像这样使用它Screen
:
public ObjectChoiceScreen() {
super(MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR);
Object[] choices = new Object[] { "one", "two", "three" };
ObjectChoiceField ocf = new FullWidthChoiceField();
ocf.setChoices(choices);
VerticalFieldManager vfm = new VerticalFieldManager();
vfm.add(new LabelField("Label", Field.USE_ALL_WIDTH)); // | DrawStyle.HCENTER));
vfm.add(ocf);
add(vfm);
}
导致
这要求您通过调用ocf.setChoices()
而不是在构造函数中设置字段的选择。如果您愿意,您当然可以将其添加到自定义构造函数中。