0

ここに私のカスタムリストフィールド

public Custom_ListField(String title[], String date[], String category[]) {

    super(0, ListField.MULTI_SELECT);
    setRowHeight(80);
    setCallback(this);
    Background background = BackgroundFactory.createBitmapBackground(bg);
    setBackground(background);

    rows = new Vector();

    for (int x = 0; x < title.length; x++) {
        TableRowManager row = new TableRowManager();

        titlelabel = new LabelField(title[x], DrawStyle.ELLIPSIS
            | LabelField.USE_ALL_WIDTH | DrawStyle.LEFT);
        titlelabel.setFont(Font.getDefault().derive(Font.BOLD, 25));

        row.add(titlelabel);

        datelabel = new LabelField(date[x], DrawStyle.ELLIPSIS
            | LabelField.USE_ALL_WIDTH | DrawStyle.LEFT);
        datelabel.setFont(Font.getDefault().derive(Font.BOLD, 20));
        row.add(datelabel);

        categorylabel = new LabelField(category[x], DrawStyle.ELLIPSIS
            | LabelField.USE_ALL_WIDTH);
        categorylabel.setFont(Font.getDefault().derive(Font.BOLD, 20));
        row.add(categorylabel);

        rows.addElement(row);
    }
    setSize(rows.size());
}

public void drawListRow(ListField listField, Graphics g, int index, int y, int width) {
    list = (Custom_ListField) listField;
    TableRowManager rowManager = (TableRowManager) list.rows.elementAt(index);
    rowManager.drawRow(g, 0, y, width, list.getRowHeight());
}

private class TableRowManager extends Manager {
    public TableRowManager() {
        super(0);
    }

    public void drawRow(Graphics g, int x, int y, int width, int height) {
        layout(width, height);

        setPosition(x, y);
        g.pushRegion(getExtent());
        subpaint(g);
        g.popContext();
    }

    protected void sublayout(int width, int height) {
        Field field = getField(0);
        layoutChild(field, getPreferredWidth() - 16, 25);
        setPositionChild(field, 5, 5);

        field = getField(1);
        layoutChild(field, 100, 20);
        setPositionChild(field, 5, 35);

        field = getField(2);
        layoutChild(field, 100, 20);
        setPositionChild(field, 110, 35);

        setExtent(getPreferredWidth(), getPreferredHeight());
    }

結果は次のとおりです。

ご覧のとおり、1行目と2行目は問題ないように見えますが、問題は3行目以降にあります。テキストの余白がどんどん大きくなっています。はっきりと見えるように、私の背景画像には明確な区切り線があります。

何が問題ですか?

4

2 に答える 2

0

実際、この問題はTableRowManagerクラスのサブレイアウトメソッドが原因です。

    setPositionChild(getField(0), 10, 5);
            layoutChild(getField(0), getField(0).getPreferredWidth(),
                    getField(0).getPreferredHeight());

ここで、setPositionメソッド(その特定のフィールドを配置するには::::たとえば、左マージンと上マージンを設定します)には3つの引数があります。1つ目は配置するフィールドです。2つ目は、そのフィールドの左側の余白です。3つ目は、そのフィールドの上部マージンです。

同様に、layoutメソッド(その特定のフィールドをレイアウトするには::::たとえば、そのフィールドの幅と高さを設定します)にも3つの引数があります。1つ目はレイアウトするフィールドです。2つ目は、そのフィールドの優先幅を取得することです。3つ目は、そのフィールドの優先高さを取得することです。

両方のメソッドのすべての引数の目的を理解し、それを適切に使用します。これがお役に立てば幸いです。

サブレイアウト方法を変更して、結果をお知らせください。

于 2012-07-04T10:19:15.567 に答える
0

背景画像の高さは、と同じである必要がありrowheightます。そうでない場合は、目のコントラストが表示されます。これは、画像が再び繰り返されたためです

于 2012-07-05T02:46:11.257 に答える