2012-06-11 107 views
1

我无法将焦点设置为具有两个LabelFieldsHorizontalFieldManager。我想在焦点时突出显示HorizontalFieldManager。我正在使用下面的代码,但它不工作。无法将焦点设置为Horizo​​ntalFieldManager

HorizontalFieldManager hrzMgrTimeLabel = new HorizontalFieldManager(
     Manager.USE_ALL_HEIGHT|Manager.FOCUSABLE) { 

    protected void onFocus(int direction) { 
     focussed = true; 
     invalidate(); 
     super.onFocus(direction); 
    } 

    protected void onUnfocus() { 
     focussed = false; 
     invalidate(); 
     super.onUnfocus(); 
    } 

    protected void paint(Graphics g) { 
     g.setBackgroundColor(0x646060); 
     if (focussed) { 
      g.setColor(Color.BLUE); 
     } 
     g.clear(); 
     super.paint(g); 
    } 
}; 

hrzMgrTimeLabel.add(a); 
hrzMgrTimeLabel.add(b); 

horizontalFieldManager_left15.add(hrzMgrTimeLabel); 

下面是执行的LabelField。

final LabelField a= new LabelField("") { 
    protected void paint(Graphics graphics) { 
     graphics.setColor(Color.WHITE); 
     graphics.setBackgroundColor(0x646060); 
     graphics.clear(); 
     super.paint(graphics); 
    } 
}; 

final LabelField b= new LabelField("") { 
    protected void paint(Graphics graphics) { 
     graphics.setColor(Color.WHITE); 
     graphics.setBackgroundColor(0x646060); 
     graphics.clear(); 
     super.paint(graphics); 
    } 
}; 
+0

更新你的问题,你可以使用一些图像来解释你想达到什么。 – Rupak

+0

我有两个labfetields,其中一个数据是7,另一个是我正在添加到HFM中的数据,我想关注它。 – harqs

+0

聚焦时,您是否需要更改Horizo​​ntalFieldManager的背景颜色? – Rupak

回答

0

如果您想要关注标签字段,请使用final LabelField a= new LabelField("".FOCUSABLE)

+0

我已经添加了HFM的标签字段,我想集中整个HFM – harqs

+0

,如果我让两个labelfield都可以聚焦但都不是整体,我将重点放在每个labelfield – harqs

+0

上,您想突出显示该时区或为编辑目的? –

0

您需要在HorizontalFieldManager上至少有一个可对焦区域。以下行将做到这一点。

hrzMgrTimeLabel.add(new NullField(NullField.FOCUSABLE)); 

请检查以下代码。

HorizontalFieldManager hrzMgrTimeLabel = new HorizontalFieldManager(Manager.USE_ALL_HEIGHT | Manager.FOCUSABLE) { 
    protected void paint(Graphics g) { 
     g.setBackgroundColor(isFocus() ? Color.BLUE : 0x646060); 
     g.clear(); 
     super.paint(g); 
    } 

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

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

    protected boolean navigationMovement(int dx, int dy, int status, int time) { 
     invalidate(); 
     return super.navigationMovement(dx, dy, status, time); 
    } 

    protected boolean navigationClick(int status, int time) { 
     invalidate(); 
     return super.navigationClick(status, time); 
    } 

    protected boolean navigationUnclick(int status, int time) { 
     invalidate(); 
     return super.navigationUnclick(status, time); 
    } 
}; 

final LabelField a = new LabelField("First Label Field") { 
    protected void paint(Graphics graphics) { 
     graphics.setColor(Color.WHITE); 
     super.paint(graphics); 
    } 
}; 

final LabelField b = new LabelField("Second Label Field") { 
    protected void paint(Graphics graphics) { 
     graphics.setColor(Color.WHITE); 
     super.paint(graphics); 
    } 
}; 

hrzMgrTimeLabel.add(new NullField(NullField.FOCUSABLE)); 
hrzMgrTimeLabel.add(a); 
hrzMgrTimeLabel.add(b); 

onFocus(...)onUnfocus()navigationMovement(...)navigationClick(...)navigationUnclick(...) - 这些方法只是对overrided刷新绘图。

+0

她只是要求让经理专注于其他领域,而不是在那位经理那里集中精力。如果添加空字段只是解决方案,那么navigationMovement,navigationClick的目的是什么,在这里。不必要的复杂解决方案。 – jeet

+0

如果你不明白'navigationMovement','navigationClick'等的用途,那么你可以问一个解释,但你应该怎么知道这些是不必要的?并且增加可调焦的'NullField'并不是这里唯一的改变。仔细阅读代码。 – Rupak

+0

您是否检查过您的代码,如果它按照要求工作,并且我知道这些方法是不必要的,原因是这些方法在超级调用中失效,invalidate将再次调用paint方法,但它会更改为什么油漆,不清楚,导致重点是NullField不在HFM上。 – jeet

1

getFocusRect()函数可能会给你答案。 它提供了在管理器中应用焦点的程度,然后可以使用Graphics.paint()方法或Border类。

+0

您能否请您解释一下适用于我的代码的代码段,我不清楚 – harqs