黑莓火炬表现出一些奇怪的行为。我已经将EditField子类化为视觉样式。在主应用程序中,我实例化其中两个自定义EditField并将样式位设置为EditField.FILTER_REAL_NUMERIC
以限制输入到数字。然后将这些EditField放在一个自定义的GridFieldManager中,同时放置一些不可聚焦的标签字段。
如果我直接在这些EditFields上触摸(在模拟器中),则会显示完整的qwerty键盘。此时,如果我触摸任何没有焦点的EditFields,则会显示正确的键盘。如果我使用触控板滚动可聚焦字段,情况也是如此;显示正确的键盘。
这是一个已知问题,还是忘记了什么?
注意:我不知道这是否是Torch设备的问题,因为我的办公室还没有Torch设备。
UPDATE:看起来这与管理此字段的自定义GridFieldManager相关。此自定义代码仅用于确定焦点的位置:
public ExGridFieldManager(int rows, int columns, long style) {
super(rows, columns, style );
} // END contructor -----------------------------------------------------------------
/* PROTECTED METHODS ----------------------------------------------------------------------- */
// handle focus gain on container
protected void onFocus( int direction )
{
if ( direction > 0 ) // focus came from previous field
{
for(int i = 0; i < this.getFieldCount(); i++)
{
if (this.getField(i).isFocusable())
{
this.getField(i).setFocus();
return;
}
}
}
else if ( direction < 0 ) // catch case where focus came from following field
{
for(int i = this.getFieldCount() - 1; i >= 0 ; i--)
{
if (this.getField(i).isFocusable())
{
this.getField(i).setFocus();
return;
}
}
}
} // END onFocus() ------------------------------------------------------------------
protected void paint( Graphics g ) {
super.paint(g);
} // END paint() --------------------------------------------------------------------
// catch touch on a given inside this manager and set focus appropriately
protected boolean touchEvent( TouchEvent event ) {
int index; // for holding index of field where touchEvent ocurred
if ( event.getEvent() == TouchEvent.CLICK ) {
index = this.getFieldAtLocation( event.getX(1), event.getY(1) );
if ( index > -1 )
this.getField(index).setFocus();
}
return false;
} // END touchEvent() ---------------------------------------------------------------
/* PUBLIC METHODS -------------------------------------------------------------------------- */
// determines when this manager should and should not recieve focus
public boolean isFocusable()
{
for(int i = 0; i< this.getFieldCount(); i++)
{
if (this.getField(i).isFocusable())
{
return true;
}
}
return false;
} // END isFocusable() --------------------------------------------------------------
} // END class ====================================================================================
更新2 :我的目标是Blackberry OS 5.0版。
答案 0 :(得分:1)
使用FILTER_NUMERIC
作为样式位。
答案 1 :(得分:0)
问题在于Blackberry OS 5.0中的GridFieldManager。我找到了一个自定义的here,直接来自net.rim.device.api.ui.Manager
,它解决了这个问题。