2

BlackBerry (OS 6+) では、下の画像のようなレイアウトが必要です。しかし、これまでのところ、赤丸の部分を正しく取得できていません。

を使用し、と 2 つをHorizontalFieldManager追加しました。しかし、その後、 のみが画面上に表示され、2 つのボタンが画面から押し出されます (ただし、表示されていなくてもフォーカス可能です)。BasicEditFieldButtonFieldsBasicEditField

それで、誰かアイデアはありますか?どんな助けでも大歓迎です!

画像(私がやろうとしていることは赤丸で囲まれています): ここに画像の説明を入力

4

3 に答える 3

3

これを試してみてください。

HorizontalFieldManager manager = new HorizontalFieldManager(USE_ALL_WIDTH);
    BasicEditField editField = new BasicEditField("Test", ""){
        protected void layout(int width, int height) {
            super.layout(width, height);
            setExtent(140, getPreferredHeight());
        }
    };
    manager.add(editField);
    manager.add(new ButtonField("button1"));
    manager.add(new ButtonField("button2"));
    add(manager);

上記の setExtent(width,height) メソッドで、必要に応じて幅を設定します。

于 2012-04-05T12:16:24.077 に答える
2

クラスを確認できますMyManager。で同じレイアウトを実現できるかもしれませんがHorizontalFieldManager、を使用すると何度か失敗しましたHorizontalFieldManager

public class MyScreen extends MainScreen {
    private BasicEditField _bef = new BasicEditField();
    private ButtonField _bf1 = new ButtonField("Button");
    private ButtonField _bf2 = new ButtonField("Button");

    public MyScreen() {
        MyManager mgr = new MyManager();
        _bef.setText("BasicEditField");
        mgr.add(_bef);
        mgr.add(_bf1);
        mgr.add(_bf2);
        add(mgr);
    }
}

class MyManager extends Manager {
    private final int HORIZONTAL_GAP = 5;

    public MyManager() {
        super(0);
    }

    protected void sublayout(int width, int height) {
        int fields = getFieldCount();
        Field field;
        int nHeight = 0;
        int remaininigWidth = width;
        int x0, x1, x2;

        // specific layout implementation only
        if (fields == 3) {
            // right most ButtonField
            field = getField(2);
            layoutChild(field, remaininigWidth, height);
            nHeight = Math.max(nHeight, field.getHeight()); 
            remaininigWidth -= (field.getWidth() + HORIZONTAL_GAP);
            x2 = remaininigWidth;

            // middle ButtonField
            field = getField(1);
            layoutChild(field, remaininigWidth, height);
            nHeight = Math.max(nHeight, field.getHeight()); 
            remaininigWidth -= (field.getWidth() + HORIZONTAL_GAP);
            x1 = remaininigWidth;

            // first BasicEditField
            field = getField(0);
            layoutChild(field, remaininigWidth, height);
            nHeight = Math.max(nHeight, field.getHeight());
            x0 = 0;

            setPositionChild(getField(0), x0, (nHeight - getField(0).getHeight()) / 2);
            setPositionChild(getField(1), x1, (nHeight - getField(1).getHeight()) / 2);
            setPositionChild(getField(2), x2, (nHeight - getField(2).getHeight()) / 2);

            setExtent(width, nHeight);
        } else {
            setExtent(width, 0);
        }

        field = null;
    }
}
于 2012-04-05T07:52:27.763 に答える
1
 HorizontalFieldManager hfm = new HorizontalFieldManager();
BasicEditField editField = new BasicEditField("", ""){
    protected void layout(int width, int height) {
        super.layout(100,  getPreferredHeight());
        setExtent(100, getPreferredHeight());
    }
};
hfm.add(editField);
hfm.add(new ButtonField("button1"));
hfm.add(new ButtonField("button2"));
add(hfm);
于 2012-04-12T04:57:22.350 に答える