我是Blackberry开发的新手。我的应用程序包含五个列表项,每个项目都有字符串。我的要求是当一个单元格被选中时它应该放大,其他项目自动调整空间。 我为列表项目拍摄了两种类型的图像,一种用于一般视图,另一种用于在用户点击它时显示所选项目,其高度比以前高。
但问题是,当我选择一个项目时,它正在放大并重叠在下一个项目上,并且不显示完整项目而不调整它们之间的空间。 任何人都可以给我这个解决方案。我正在使用以下代码片段....
_listField.setCallback(this);
_listField.setRowHeight(45);
_listField.setChangeListener(this);
public void drawListRow(ListField arg0,Graphics graphics,int index, int y,int width){
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));
}
}
答案 0 :(得分:2)
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
}
}
}