【问题标题】:Margin Issue With Custom BlackBerry ListField自定义 BlackBerry ListField 的边距问题
【发布时间】:2012-07-05 10:46:11
【问题描述】:

这是我的自定义列表字段

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());
    }

Here is the result.

如您所见,第一排和第二排看起来没有问题,但问题出现在第三排。文本的边距越来越大。为了看得清楚,我的背景图片确实有一条清晰的分隔线。

有什么问题?

【问题讨论】:

  • 我无法查看您的结果。此处您的结果内容网站已被阻止。
  • 没有人...在我们的组织中被限制...有没有可能给我看你的截图...
  • 您的组织可以访问的任何网站?
  • 最好把它发到我的邮箱... mvigneshit@gmail.com
  • 图片已发送至您的 gmail

标签: blackberry listfield


【解决方案1】:

其实这个问题是因为你的 TableRowManager 类的 sublayout 方法造成的。

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

这里的 setPosition 方法(定位特定字段:::: 例如,设置左边距和上边距)有 3 个参数。 第一个是要定位的字段。 第二个是该字段的左侧边距。 第三个是该字段的上边距。

同样的布局方法(布局特定字段:::: 例如,设置该字段的宽度和高度)也有 3 个参数。 第一个是要布局的领域。 第二个是获得该字段的首选宽度。 第三个是获得该字段的首选高度。

了解这两种方法的每个参数的目的,然后正确地使用它。我希望这会对你有所帮助。

更改您的子布局方法并告诉我您的结果。

【讨论】:

  • @Alan 这个问题解决了吗?
  • 好吧,我现在正在尝试,昨天我已经回到家,而不是在办公室
  • @M Vignesh,我区分了一个也不能
  • 如果我在没有setPositionChild 的情况下调用layoutChild,结果为空,没有任何显示。另一种方式与问题相同,仅没有定位,我认为是 for 循环问题导致上边距不断增加
  • 我发现了问题,问题是我的背景图片。图像是 5 x 70 但我设置 rowheight 80 或 60 然后就变成了这样,rowheight 必须与图像高度相同
【解决方案2】:

背景图片的高度必须与rowheight 相同,否则您会看到眼睛对比。这是因为图像再次重复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2015-05-15
    相关资源
    最近更新 更多