我是黑莓新手development.My 应用程序包含五个列表项,每个列表项都有字符串item.My 要求是当选择一个单元格时,它应该放大,其他项目会自动调整它们之间的空间。我为列表项拍摄了两种类型的图像,一种用于常规视图,另一种用于在用户单击所选项目时显示所选项目,该选项比以前更高。

但问题是,当我选择一个项目时,它正在放大并重叠在下一个项目上,并且没有显示完整的项目,也没有调整它们之间的空间。任何人都可以给我这个解决方案。我正在使用以下代码片段。...

_listField.setCallback(this);
    _listField.setRowHeight(45);
    _listField.setChangeListener(this);

public void drawListRow(ListField arg0,Graphics graphics,int index, int y,int宽度){

    if (listFieldIndex != index) {

        graphics.drawBitmap(0, y, listBkgrnd.getWidth(), listBkgrnd
                .getHeight(), listBkgrnd, 0, 0);

        graphics.setColor(0xAA0000);
        graphics.setFont(this.getFont().derive(Font.BOLD, 17));
        graphics.drawText(((Station) _stationList.elementAt(index))
                .getStationName(), 15, y + 15, 0,
                (listBkgrnd.getWidth() - 70));

        graphics.setColor(0x770000);
        graphics.setFont(this.getFont().derive(Font.PLAIN, 13));

        // graphics.drawText(
        // ((Station) _stationList.elementAt(index)).getCT(), 15,
        // y + 40, 0, (listBkgrnd.getWidth() - 65));

    } else {

        graphics.drawBitmap(0, y, playBkgrnd.getWidth(), playBkgrnd
                .getHeight(), playBkgrnd, 0, 0);

        graphics.setColor(0xAA0000);
        graphics.setFont(this.getFont().derive(Font.BOLD, 17));
        graphics.drawText(((Station) _stationList.elementAt(index))
                .getStationName(), 15, y + 15, 0,
                (playBkgrnd.getWidth() - 70));

        graphics.setColor(0x770000);
        graphics.setFont(this.getFont().derive(Font.PLAIN, 13));

        graphics.drawText(
                    s.getCT(), 15,
                    y + 40, 0, (playBkgrnd.getWidth() - 65));
    }
}
有帮助吗?

解决方案

BlackBerry上的列表字段假定所有行的高度相同。

要获得您想要的效果,请在 VerticalFieldManager, ,你会得到类似于ListField的效果。一定要让你的物品聚焦,然后打电话 updateLayout 每当他们获得或失去焦点,然后在你的 layout 方法,根据是否聚焦设置字段的高度。类似下面的大纲:

public class CustomListFieldItem extends Field {

    public boolean isFocusable() {
        return true;
    }

    protected void onFocus(int direction) {
        super.onFocus(direction);
        updateLayout();
    }

    protected void onUnfocus() {
        super.onUnfocus();
        updateLayout();
    }

    protected void layout(int width, int height) {
        if (isFocus()) {
            setExtent(width, playBkgrnd.getHeight());
        }
        else {
            setExtent(width, listBkgrnd.getHeight());
        }

    }

    protected void paint(Graphics graphics) {
        if (isFocus()) {
            // draw selected item
        }
        else {
            // draw unselected item
        }
    }

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top