我开发了一款带有简单聊天功能的BlackBerry Application。当用户点击Vertical Field Manager (VFM)
时,聊天消息会显示在Send
内。用户可以发送多条消息。发送的每条新消息都会显示在旧消息的下方。这样,Vertical Field Manager
的大小不断增加。我创建了一个可滚动的VFM
,因此用户可以通过向下滚动查看发送的最新消息。 发送邮件时是否可以自动滚动到VFM的底部,以便在最后一条消息上设置焦点?
我尝试过调用vfm.setVerticalScroll(int y);
以及LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT|Field.FOCUSABLE);
,但这没有帮助。请指导。
vr2
=垂直字段管理器
chat1
=聊天消息已添加到VFM
编辑:我在StackOverFlow上遇到了this链接,并在我的代码中应用了如下更改:
vr2.setVerticalScroll(vr2.getVirtualHeight());
LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT)
{
protected void applyTheme(Graphics g, boolean arg1)
{
g.setColor(Color.DEEPSKYBLUE);
super.applyTheme(g, arg1);
}
};
Font myFont = Font.getDefault().derive(Font.BOLD, 8, Ui.UNITS_pt);
chat1.setFont(myFont);
chat1.setBorder( leftBorder );
chat1.setMargin( 0, 0, -15, 0);
vr2.setBorder(bdr);
vr2.add(chat1);
Field f;
int i = vr2.getFieldCount();
f = vr2.getField(i-1); //getFieldCount, gets total number of fields
f.setFocus();
这让我非常接近我正在寻找的解决方案。 VFM滚动到正常水平以下。但是,不是定位到VFM中的最后一条消息,而是每次都滚动到倒数第二条消息。为什么会这样?它应该滚动到VFM中的最后一条消息;就在VFM的底部。
答案 0 :(得分:2)
我终于设法解决了这个问题。如果有其他人遇到这样的问题,我会分享我的答案。虽然我上面的问题中的编辑帮助我更接近解决方案,但我发现错误在于没有在正确的位置调用vr2.setVerticalScroll(vr2.getVirtualHeight());
。
有关详细信息,请在blackberry支持论坛上查看有关stackoverflow的this问题和this。解决方案如下:
LabelField chat1 = new LabelField( "Hi", Field.FIELD_LEFT)
{
protected void applyTheme(Graphics g, boolean arg1)
{
g.setColor(Color.DEEPSKYBLUE);
super.applyTheme(g, arg1);
}
};
Font myFont = Font.getDefault().derive(Font.BOLD, 8, Ui.UNITS_pt);
chat1.setFont(myFont);
chat1.setBorder( leftBorder );
chat1.setMargin( 0, 0, -15, 0);
vr2.setBorder(bdr);
vr2.setVerticalScroll(vr2.getVirtualHeight()); //scrolls to the bottom of the vertical field manager
vr2.add(chat1);
Field f;
int i = vr2.getFieldCount();
f = vr2.getField(i-1); //getFieldCount, gets total number of fields
f.setFocus(); //sets focus on the newly added field