2012-01-04 79 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; 
}