私はブラックベリーを初めて使用し、1 つのカスタム マネージャーを作成しようとしています。そのため、レイアウトを非常にシンプルにして、2 つの Labelfields を互いに並べて表示するようにしています (両方を HorizontalFieldManager に配置することで非常に簡単に取得できますが、カスタム マネージャーでこれを行う必要があります)。
出力は次のようになります:-Hello(FirstField) User(SecondField)
これが私のクラスのサブレイアウトメソッドで、Manager に拡張されています
public MyManager() {
// construct a manager with vertical scrolling
super(Manager.VERTICAL_SCROLL);
}
protected void sublayout(int width, int height) {
Field field;
// get total number of fields within this manager
int numberOfFields = getFieldCount();
int x = 0;
int y = 0;
for (int i = 0; i < numberOfFields; i++) {
field = getField(i); // get the field
setPositionChild(field, x, y); // set the position for the field
layoutChild(field, width, height); // lay out the field
x = x + field.getHeight();
}
setExtent(width, height);
}
この行を削除するとx = x+field.getWidth();
、両方のテキスト (Hello User) が重なってしまいます (これは x,y = 0 が原因だと思います) 今field.getWidth()
、フィールド 1 で使用されている幅を返すことを望みますが、代わりにそれを与えています私のディスプレイの幅(これは私が思うものです)なので、レイアウトでHelloだけを見ることができます。
アイテムを垂直に配置する場合は、適切に使用できますが、適切な幅の値が返されないy = y+field,getHeight();
理由getWidth
がわかりません。この問題を理解するためにどこかを誤解させる可能性があります。
getPrefferedWidth()
メソッドをオーバーライドする必要がありますか? 私もこれを試して、このメソッドをそのままにしておきますが、2つのフィールドの間にいくつかのスペース(2-3)が残り、他のテキストが重なっています。