这是我的自定义列表字段
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());
}
正如您所看到的,第一行和第二行看起来没什么问题,但问题会转到第三行。文本的边距越来越大。为了清楚地看清楚,我的背景图像确实有一条清晰的分隔线。
有什么问题?
答案 0 :(得分:0)
实际上这个问题是因为TableRowManager类的sublayout方法。
setPositionChild(getField(0), 10, 5);
layoutChild(getField(0), getField(0).getPreferredWidth(),
getField(0).getPreferredHeight());
这里的setPosition方法(定位特定字段::::例如,设置左边和上边距)有3个参数。 第一个是将被定位的领域。 第二个是该字段的左侧边距。 第三个是该领域的最高利润。
类似于布局方法(要布置特定字段::::例如,设置该字段的宽度和高度)也有3个参数。 第一个是要布局的领域。 第二个是获得该字段的首选宽度。 第三个是获得该字段的首选高度。
了解方法的每个参数的目的,然后正确使用它。我希望这会对你有所帮助。
更改您的子布局方法,让我知道您的结果。
答案 1 :(得分:0)
背景图片的高度必须与rowheight
相同,否则您将看到眼睛对比度。这是因为图像再次重复