2011-04-19 66 views
0

下面的代码定义了一个带有两个字段的水平字段管理器。我怎样才能修改代码,以便只在被添加的两个字段上设置背景而不是整个管理器。请注意,即时通讯不会尝试将单个背景图像添加到每个字段,而是跨越两个字段的共享背景图像。自定义Horizo​​ntalFieldManager中两个字段后面的背景图像

LabelField label = new LabelField("name"); 

      TextField e = new TextField(Field.FOCUSABLE); 

      final Bitmap b = Constants.SETTINGS; 
      final Background bg = BackgroundFactory.createBitmapBackground(Constants.SETTINGS); 

      HorizontalFieldManager manager = new HorizontalFieldManager() 
      { 
       public void sublayout (int width, int height) 
       { 

        Field field; 
        int x = 0; 

        super.sublayout(b.getWidth(), height); 
        super.setExtent(b.getWidth(), height); 
        for (int i = 0; i < getFieldCount(); i++) 
        { 
         field = getField(i); 
         layoutChild(field, Display.getWidth()/2, height); 
         setPositionChild(field, x, 10); 
         x += Display.getWidth()/2; 
        } 
       } 
      }; 
      manager.add (label); 
      manager.add (e); 
      add (manager); 

Image of desired effect

+0

我从代码中了解到,您正在尝试添加两个字段,每个字段占用一半的屏幕?在提供可能与您想要做的事完全无关的解决方案之前,请先检查一下。 – jprofitt 2011-04-19 16:48:10

+0

那是正确的。标签字段和文本字段每个都占用屏幕一半的常见图像背景。我附上了所需效果的截图。谢谢。 – 2011-04-19 20:00:58

回答

1

相反比把它们放在一个自定义的经理,可能更容易只覆盖Fields的布局()调用是

protected void layout(int width, int height) { 
    super.layout(width, height); 
    setExtent(Display.getWidth()/2, this.getHeight()); 
} 

,然后你可以只使用一个正常的Horizo​​ntalFieldManager您可以设置背景和填充( hfm.setPadding(10, 10, 10, 10);)。添加填充将减少字段的可用宽度,因此您应该在layout()调用中减小它们的宽度。

+0

嗨jprofitt ...我已经覆盖此布局方法,但得到编译时错误,“无法从管理器覆盖最终的方法” – iAmitWagh 2011-11-03 12:45:14

+0

在'经理'你通常必须做的在'sublayout()'而不是'layout()'中工作,因为它们将其声明为final – jprofitt 2011-11-03 13:14:50

1

可以相互抵消他们的个人背景的一些花哨,昂贵的位图步法(数学)“共享”一个图像使用的setBackground()出现,或者你可以重写其绘制方法通过根据相对位置“移动”整个位图的能力来实现相同的效果... 那是什么? :)

编辑: 创建一个自定义字段中使用您的位图和喂养它,你想什么内容,然后覆盖油漆画你喜欢什么,你喜欢它...

protected void paint(Graphics g){ 
    // conditionals, etc 
    g.drawBitmap(x, y, width, height, bitmap, left, top); 
    // color changes, etc 
    g.drawText(yourText); 
    // clean up 
} 
+0

我想要两个字段共享一个共同的图像背景。我附上了即时通讯试图实现的截图。谢谢。 – 2011-04-19 20:02:28

+0

请参阅上面的编辑sry从手机早期工作大声笑 – Dan 2011-04-19 22:49:37