2012-03-27 67 views
0

我想显示图像在水平管理器的右侧有2 labelfields,当我添加图像时显示的数据来自labelfield vainshed,只有图像显示在右侧。我现在用如下的自定义位图字段:显示图像在水平管理器的右侧

Public class screen{ 
    HorizontalFieldManager horizontalFieldManager_left1 = new HorizontalFieldManager() { 
    protected boolean keyChar(char key, int status, int time) { 
       Field field = getFieldWithFocus(); 
       Dialog.alert("here 1"); 
       return super.keyChar(key, status, time); 
      } 
     }; 
     final ImageButtonField alarmBitmapField = new ImageButtonField("", 
       Field.FOCUSABLE, "ringtone.png", "ringtone.png", 0x9cbe95); 
     System.out 
       .println("width is ::" + alarmBitmapField.getPreferredWidth()); 
     alarmBitmapField.setMargin(0, 0, 0, Display.getWidth() 
       - alarmBitmapField.getPreferredWidth()); 
     horizontalFieldManager_left1.add(alarmBitmapField); 
     horizontalFieldManager_left1.add(time1); 
     horizontalFieldManager_left1.add(min1); 
     horizontalFieldManager_left1.add(new LabelField(" ")); 
     horizontalFieldManager_left1.add(desc1); 

     vfm.add(horizontalFieldManager_left1); 


} 

自定义类

public class ImageButtonField extends Field { 

     private String _label; 
     private int _labelHeight; 
     private int _labelWidth; 
     private Font _font; 

     private Bitmap _currentPicture; 
     private Bitmap _onPicture; 
     private Bitmap _offPicture; 
     int color; 

     public ImageButtonField(String text, long style, String img, 
       String img_hvr, int color) { 
      super(style); 

      _offPicture = Bitmap.getBitmapResource(img); 
      _onPicture = Bitmap.getBitmapResource(img_hvr); 

      _font = getFont(); 
      _label = text; 
      _labelHeight = _onPicture.getHeight(); 
      _labelWidth = _onPicture.getWidth(); 

      this.color = color; 

      _currentPicture = _offPicture; 
     } 

     /** 
     * @return The text on the button 
     */ 
     String getText() { 
      return _label; 
     } 

     /** 
     * Field implementation. 
     * 
     * @see net.rim.device.api.ui.Field#getPreferredHeight() 
     */ 
     public int getPreferredHeight() { 
      return _labelHeight; 
     } 

     /** 
     * Field implementation. 
     * 
     * @see net.rim.device.api.ui.Field#getPreferredWidth() 
     */ 
     public int getPreferredWidth() { 
      return _labelWidth; 
     } 

     /** 
     * Field implementation. Changes the picture when focus is gained. 
     * 
     * @see net.rim.device.api.ui.Field#onFocus(int) 
     */ 
     protected void onFocus(int direction) { 
      _currentPicture = _onPicture; 
      invalidate(); 
     } 

     /** 
     * Field implementation. Changes picture back when focus is lost. 
     * 
     * @see net.rim.device.api.ui.Field#onUnfocus() 
     */ 
     protected void onUnfocus() { 
      _currentPicture = _offPicture; 
      invalidate(); 
     } 

     /** 
     * Field implementation. 
     * 
     * @see net.rim.device.api.ui.Field#drawFocus(Graphics, boolean) 
     */ 
     protected void drawFocus(Graphics graphics, boolean on) { 
      // Do nothing 
     } 

     /** 
     * Field implementation. 
     * 
     * @see net.rim.device.api.ui.Field#layout(int, int) 
     */ 
     protected void layout(int width, int height) { 
      setExtent(Math.min(width, getPreferredWidth()), 
        Math.min(height, getPreferredHeight())); 
     } 

     /** 
     * Field implementation. 
     * 
     * @see net.rim.device.api.ui.Field#paint(Graphics) 
     */ 
     protected void paint(Graphics graphics) { 
      // First draw the background colour and picture 
      graphics.setColor(this.color); 
      graphics.fillRect(0, 0, getWidth(), getHeight()); 
      graphics.drawBitmap(0, 0, getWidth(), getHeight(), _currentPicture, 0, 
        0); 

      // Then draw the text 
      graphics.setColor(Color.BLACK); 
      graphics.setFont(_font); 
      graphics.drawText(
        _label, 
        4, 
        2, 
        (int) (getStyle() & DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK), 
        getWidth() - 6); 
     } 

     /** 
     * Overridden so that the Event Dispatch thread can catch this event instead 
     * of having it be caught here.. 
     * 
     * @see net.rim.device.api.ui.Field#navigationClick(int, int) 
     */ 
     protected boolean navigationClick(int status, int time) { 
      fieldChangeNotify(1); 
      return true; 
     } 

    } 
+0

修复您的文章格式,然后我们可以帮助你 – 2012-03-27 14:31:53

+0

@CarlosGavidia编辑 – user1195292 2012-03-27 14:36:25

回答

1

可以解决使用GridFieldManager您的问题,如解释说: Search bar on top of the mainscreen blackberry

完整说明here

+0

这就是仪式,但我的整个应用程序是建立在HFM,因此需要了解它如何成为可能,它 – user1195292 2012-03-27 15:09:42

+0

我很抱歉,但我认为你只能使用Horizo​​ntalFieldManager来做所有事情。 – rosco 2012-03-27 15:13:29

+0

有一些方法可以使用布局或其他东西 – user1195292 2012-03-27 15:20:36