2012-01-04 76 views
0

我在Blackberry中定義了一個BitmapButtonField。但默認的灰色背景沒有去。藍色的onFocus邊框? 如何改變他們在BB 4.5如何在黑莓4.5中設置字段的背景?

enter image description here

+0

這是您的自定義按鈕? – BBdev 2012-01-05 03:53:39

+0

您是否使用任何圖像到該位圖? – alishaik786 2012-01-05 04:40:50

+0

雅作品!謝謝!! – 2012-01-05 19:56:20

回答

2

你好,這是位圖按鈕和背景顏色紅

manager=new Field(Field.FOCUSABLE){ 
       protected void onFocus(int direction) { 
        super.onFocus(direction); 
        flag1=true; 
        invalidate(); 
       } 
       protected void onUnfocus() { 
        flag1=false; 
        invalidate(); 

       } 
       protected void layout(int width, int height) { 
        setExtent(image.getWidth(),image.getHeight()); 
       } 
       protected void paint(Graphics graphics) { 
        if(flag1){ 
         graphics.setBackgroundColor(Color.RED); 
         graphics.clear(); 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0); 
        }else{ 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0); 
        } 
       } 
       protected boolean navigationClick(int status, int time) { 
        fieldChangeNotify(1); 
        return true; 
       } 
      }; 
      manager.setChangeListener(this); 
      add(manager); 

輸出如下圖像 enter image description here 這是背景圖像和默認背景色

manager1=new Field(Field.FOCUSABLE){ 
       protected void onFocus(int direction) { 
        super.onFocus(direction); 
        flag2=true; 
        invalidate(); 
       } 
       protected void onUnfocus() { 
        button=image; 
        flag2=false; 
        invalidate(); 

       } 
       protected void layout(int width, int height) { 
        setExtent(image.getWidth(),image.getHeight()); 
       } 
       protected void paint(Graphics graphics) { 
        if(flag2) 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0); 
         else 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0); 
       } 
       protected boolean navigationClick(int status, int time) { 
        fieldChangeNotify(1); 
        return true; 
       } 
      }; 
      manager1.setChangeListener(this); 
      add(manager1); 

出把如下enter image description here

全功能類以下爲更好地理解

import net.rim.device.api.system.Bitmap; 
import net.rim.device.api.ui.Color; 
import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.FieldChangeListener; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.Dialog; 
import net.rim.device.api.ui.container.MainScreen; 

public class StartUp extends UiApplication{ 
    public static void main(String[] args) { 
     StartUp up=new StartUp(); 
     up.enterEventDispatcher(); 
    } 
    public StartUp() 
    { 
     pushScreen(new Demoscreen()); 
    } 
    class Demoscreen extends MainScreen implements FieldChangeListener 
    { 
     Bitmap image,image_hover; 
     boolean flag1,flag2; 
     Field manager=null,manager1=null; 
     public Demoscreen() { 
      image=Bitmap.getBitmapResource("Download_48x48.png"); 
      image_hover=Bitmap.getBitmapResource("Download_48x48.png"); 
      manager=new Field(Field.FOCUSABLE){ 
       protected void onFocus(int direction) { 
        super.onFocus(direction); 
        flag1=true; 
        invalidate(); 
       } 
       protected void onUnfocus() { 
        flag1=false; 
        invalidate(); 

       } 
       protected void layout(int width, int height) { 
        setExtent(image.getWidth(),image.getHeight()); 
       } 
       protected void paint(Graphics graphics) { 
        if(flag1){ 
         graphics.setBackgroundColor(Color.RED); 
         graphics.clear(); 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0); 
        }else{ 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0); 
        } 
       } 
       protected boolean navigationClick(int status, int time) { 
        fieldChangeNotify(1); 
        return true; 
       } 
      }; 
      manager.setChangeListener(this); 
      add(manager); 
      manager1=new Field(Field.FOCUSABLE){ 
       protected void onFocus(int direction) { 
        super.onFocus(direction); 
        flag2=true; 
        invalidate(); 
       } 
       protected void onUnfocus() { 
        flag2=false; 
        invalidate(); 
       } 
       protected void layout(int width, int height) { 
        setExtent(image.getWidth(),image.getHeight()); 
       } 
       protected void paint(Graphics graphics) { 
        if(flag2) 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image_hover,0,0); 
         else 
         graphics.drawBitmap(0, 0, image.getWidth(),image.getHeight(), image,0,0); 
       } 
       protected boolean navigationClick(int status, int time) { 
        fieldChangeNotify(1); 
        return true; 
       } 
      }; 
      manager1.setChangeListener(this); 
      add(manager1); 
     } 
     public void fieldChanged(Field field, int context) { 
      if(field==manager) 
      { 
       displayDialog("I am first field"); 
      }else if(field==manager1) 
      { 
       displayDialog("I am second field"); 
      } 

     } 
     public void displayDialog(final String message) 
     { 
      UiApplication.getUiApplication().invokeLater(new Runnable() { 
       public void run() { 
        Dialog.inform(message); 
       } 
      }); 
     } 
    } 
} 

欲瞭解更多詳情,請訪問以下鏈接,背景Background logic for 4.5 OS

1

檢查下列定製按鈕字段鏈接:

Implement advanced buttons, fields, and managers.

User Defined Buttons - Create a Custom Button From an Image

Blackberry Custom Button Field

How to create a Custom Button Field in Blackberry

通常重寫applyTheme(..)(空實現)將刪除字段的默認樣式。此外,我們需要覆蓋paint(..),paintBackground(..),drawFocus(..),並根據當前焦點狀態更改其實施。以下是擴展Field以製作自定義按鈕字段的情況的代碼片段。

private final Bitmap focusedBitMap = Bitmap.getBitmapResource("focused.png"); 
private final Bitmap unfocusedBitmap = Bitmap.getBitmapResource("unfocused.png"); 

protected void paint(Graphics graphics) { 
    // paint background 
    graphics.setBackgroundColor(isFocus() ? Color.RED : Color.GREEN); 
    graphics.clear(); 

    // draw button image 
    Bitmap myBitmap = isFocus() ? focusedBitMap : unfocusedBitmap; 
    if (myBitmap != null) { 
     // image position calculation 
     int imageX = 0; 
     int imageY = 0; 
     graphics.drawBitmap(imageX, imageY, 
      myBitmap.getWidth(), myBitmap.getHeight(), 
      myBitmap, 0, 0); 
    } 
} 

protected void drawFocus(Graphics graphics, boolean on) { 
} 

public boolean isFocusable() { 
    return true; 
}