0

画面の下部に画像と文字列を含むバーを追加したいのですが、同じように間隔を空けたいと思いました

img1 string img2 | img3、これは下部のバーがどのように見えるかです。以下のコードは適切に機能していません。アライメントが取得され、最後の画像が消えています。

HorizontalFieldManager horizontalFieldManager = new HorizontalFieldManager(
                FIELD_BOTTOM) {
            public void paint(Graphics graphics) {
                graphics.setBackgroundColor(0x316AC5);
                graphics.clear();
                super.paint(graphics);
            }
        };
        Bitmap fadeBitmap = Bitmap
                .getBitmapResource("GE_TimeZone_Fade_blue.PNG");
        Bitmap clockBitmap = Bitmap.getBitmapResource("GE_Cal_icon_blue.PNG");
        Bitmap tzBitmap = Bitmap
                .getBitmapResource("GE_TimeZone_Button_blue.PNG");

        final ImageButtonField unfocus = new ImageButtonField("",
                Field.FOCUSABLE | FIELD_LEFT, "GE_TimeZone_Fade_blue.PNG",
                "GE_TimeZone_Fade_blue.PNG", 0xFFFFFF);
        LabelField test = new LabelField("hello");
        final ImageButtonField bitmapField = new ImageButtonField("",
                Field.FOCUSABLE | FIELD_HCENTER, "GE_Cal_icon_blue.PNG",
                "GE_Cal_icon_onSelect.PNG", 0xFFFFFF);

    final ImageButtonField bitmapField1 = new ImageButtonField("",
            Field.FOCUSABLE | FIELD_RIGHT, "GE_TimeZone_Button_blue.PNG",
            "GE_TimeZone_Btn_OnSelect.PNG", 0xFFFFFF);

    int margin = ((Display.getWidth() - (fadeBitmap.getWidth()
            + clockBitmap.getWidth() + tzBitmap.getWidth() + test
            .getWidth())) / 4);

    unfocus.setMargin(0, margin, 0, 0);
    test.setMargin(0, margin, 0, 0);
    bitmapField.setMargin(0, margin, 0, 0);
    bitmapField1.setMargin(0, margin, 0, 0);

    horizontalFieldManager.add(unfocus);
    horizontalFieldManager.add(test);
    horizontalFieldManager.add(bitmapField);
    horizontalFieldManager.add(bitmapField1);

    this.setStatus(horizontalFieldManager);
4

2 に答える 2

1

使用しているコードに問題があります。次の行を確認してください。

int margin = ((Display.getWidth() - (fadeBitmap.getWidth()
            + clockBitmap.getWidth() + tzBitmap.getWidth() + test
            .getWidth())) / 4);

フィールドgetWidth()およびgetHeight()は、その親マネージャーのレイアウト メソッドが呼び出された場合に有効な値を返します。したがって、 を使用してマージンを調整することは安全ではありません。getWidth()getHeight()

ただし、 Horizo ​​ntalFieldManagerFieldを拡張することで、 の配置と位置を制御することができます。次のコードと出力を確認して、どのように実行できるかを理解してください。

出力

ここに画像の説明を入力

StatusFieldManager の使用:

StatusFieldManager statusFieldManager = new StatusFieldManager();
statusFieldManager.setBackground(BackgroundFactory.createSolidBackground(0x316AC5));

final Bitmap bmTest = Bitmap.getBitmapResource("bitmap.png");

BitmapField bmOne = new BitmapField(bmTest, Field.FOCUSABLE | FIELD_LEFT);
BitmapField bmTwo = new BitmapField(bmTest, Field.FOCUSABLE | FIELD_LEFT);
BitmapField bmThree = new BitmapField(bmTest, Field.FOCUSABLE | FIELD_LEFT);
LabelField lblTest = new LabelField("Test");

statusFieldManager.add(bmOne);
statusFieldManager.add(lblTest);
statusFieldManager.add(bmTwo);
statusFieldManager.add(bmThree);

setStatus(statusFieldManager);

StatusFieldManager の実装

class StatusFieldManager extends HorizontalFieldManager {
    protected void sublayout(int width, int height) {
        int numField = getFieldCount();
        Field f;
        int nHeight = 0, maxFieldWidth = width / 4;
        if (numField == 4) {
            f = getField(0);
            layoutChild(f, maxFieldWidth, height);
            nHeight = Math.max(nHeight, f.getHeight());

            f = getField(1);
            layoutChild(f, maxFieldWidth, height);
            nHeight = Math.max(nHeight, f.getHeight());

            f = getField(2);
            layoutChild(f, maxFieldWidth, height);
            nHeight = Math.max(nHeight, f.getHeight());

            f = getField(3);
            layoutChild(f, maxFieldWidth, height);
            nHeight = Math.max(nHeight, f.getHeight());

            // set position of the child fields
            int x = 0, y = 0;
            int requiredFieldWidth = 0;
            for (int i=0;i<numField;i++) {
                requiredFieldWidth += getField(i).getWidth(); 
            }
            int spaceBetweenFields = (width - requiredFieldWidth) / (numField - 1);

            for (int i=0;i<numField;i++) {
                setPositionChild(getField(i), x, (nHeight - getField(i).getHeight()) / 2);
                x += getField(i).getWidth() + spaceBetweenFields;
            }
            setExtent(width, nHeight);

        } else {
            setExtent(0, 0);
        }
    }
}
于 2012-06-07T10:53:36.573 に答える
0

これを試して -

unfocus.setMargin(0, margin, 0, 0);
test.setMargin(0, 10, 0, 0);
bitmapField.setMargin(0, 10, 0, 0);
bitmapField1.setMargin(0, 10, 0, 0);
于 2012-06-07T10:36:23.230 に答える