2012-03-27 35 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