1

垂直フィールド マネージャーを使用して、LabelField を水平方向に中央揃えにする必要があります。この LabelField のフォントのサイズも大きくする必要があります。FIELD_HCENTER を使用して中央揃えにすると、フォントのサイズを変更すると、フィールドの位置が変更されることがわかりました。

これがコードです

VerticalFieldManager vfm = new VerticalFieldManager(Field.FIELD_VCENTER | Manager.USE_ALL_WIDTH);
LabelField title = new LabelField("My Title",Field.FIELD_HCENTER) ;
title.setFont(Font.getDefault().derive(Font.BOLD, 18, Ui.UNITS_pt);
vfm.add(title);

(3 行目の title.setFont を削除すると、タイトルは中央に配置されます。それ以外の場合はそうではありません)。これを解決するには、助けが必要です。何か助けていただければ幸いです。ありがとう

4

1 に答える 1

1

sublayoutのメソッドをオーバーライドすることでカスタム FieldManger を作成できますVerticalFieldManager。これにより、その子が中央に配置されます。以下はそのような実装です。

class CustomVerticalFieldManger extends VerticalFieldManager {
        private final int VERTICAL_GAP = 30;

        protected void sublayout(int maxWidth, int maxHeight) {
            int nFields = getFieldCount(), height = 0, xPosition, yPosition = 0;
            Field f;
            for (int i = 0; i < nFields; i++) {
                f = getField(i);
                layoutChild(f, maxWidth, maxHeight);
                height += f.getHeight();
                if (i != 0) {
                    height += VERTICAL_GAP;
                }
            }
            for (int i = 0; i < nFields; i++) {
                f = getField(i);
                xPosition = (maxWidth - f.getWidth()) / 2;
                setPositionChild(f, xPosition, yPosition);
                yPosition += f.getHeight();
                if (i != nFields - 1) {
                    yPosition += VERTICAL_GAP;
                }
            }
            setExtent(maxWidth, height);
        }
    }

使用法

class MyScreen extends MainScreen {
    private LabelField lblOne, lblTwo, lblThree;

    public MyScreen() {
        CustomVerticalFieldManger cvfm = new CustomVerticalFieldManger();
        cvfm.setBackground(BackgroundFactory.createSolidBackground(Color.AQUA));

        lblOne = new LabelField("The quick brown fox jumps over the lazy dog");
        lblTwo = new LabelField("The quick brown fox jumps over the lazy dog");
        lblThree = new LabelField("The quick brown fox jumps over the lazy dog");

        cvfm.add(lblOne);
        cvfm.add(lblTwo);
        cvfm.add(lblThree);

        add(cvfm);

        changeFont();
    }

    private int fontSize = 5;

    private void changeFont() {
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            public void run() {
                UiApplication.getUiApplication().invokeLater(new Runnable() {
                    public void run() {
                        if (fontSize == 50) {
                            fontSize = 5;
                        }
                        lblOne.setFont(Font.getDefault().derive(Font.PLAIN,
                                fontSize));
                        lblTwo.setFont(Font.getDefault().derive(Font.PLAIN,
                                fontSize + 2));
                        lblThree.setFont(Font.getDefault().derive(Font.PLAIN,
                                fontSize + 4));
                        fontSize += 6;
                        updateLayout();
                        invalidate();
                    }
                });
            }
        };

        timer.schedule(task, 500, 1000);
    }
}
于 2012-09-17T18:16:19.303 に答える