2012-03-31 59 views
0

嗨,我已經在我的屏幕上生成自定義佈局,我想要改變水平字段管理器的顏色或圖像時,它的焦點,還執行選定的水平字段管理器的Click事件。對於 更多參考請參閱屏幕截圖。我如何在黑莓中的自定義水平字段管理器和點擊事件中設置焦點?

這是我的代碼,我曾嘗試..

HorizontalFieldManager hfmrow=new HorizontalFieldManager(USE_ALL_WIDTH|HorizontalFieldManager.FOCUSABLE | Field.FOCUSABLE) 
          { 
            public void onFocus(int direction) 
             { 
              isFocus = true; 
              super.onFocus(direction); 
              invalidate(); 

             } 
            public void onUnfocus() 
            { 
             invalidate(); 
             isFocus = false; 
             super.onUnfocus(); 



            } 
            public void paint(Graphics g) 
            { 
             if(isFocus) 
             { 
              hfmrow.setBackground(BackgroundFactory.createSolidBackground(Color.RED)); 
              invalidate();                      
              super.paint(g); 

             } 
             else 
             { 
              hfmrow.setBackground(BackgroundFactory.createSolidBackground(Color.GREEN));           
              invalidate();           
              super.paint(g); 
             } 
            } 

           protected boolean navigationClick(int status, int time) 
           { 
            Dialog.alert("You are in hfm"+id); 
            return true; 
           } 

          };       


          hfmrow.setMargin(0, 10, 0, 10); 
          hfmrow.add(new NullField(Field.FOCUSABLE)); 

任何幫助是讚賞.. Thanx提前

enter image description here

回答

2

在這裏,你可以怎樣做呢這段代碼是改變顏色,當你選擇HFM

import net.rim.device.api.system.Display; 
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.Manager; 
import net.rim.device.api.ui.TouchEvent; 
import net.rim.device.api.ui.Touchscreen; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.Dialog; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.NullField; 
import net.rim.device.api.ui.container.HorizontalFieldManager; 
import net.rim.device.api.ui.container.MainScreen; 

public class sample extends MainScreen implements FieldChangeListener{ 

HorizontalFieldManager logInDetailManager=null; 
int background_color=0; 

public sample() { 

    logInDetailManager = new HorizontalFieldManager(Manager.USE_ALL_WIDTH|Field.FOCUSABLE){ 
     protected void sublayout(int maxWidth, int maxHeight) { 
       int height=40; 
      super.sublayout(Display.getWidth(), height); 
      setExtent(Display.getWidth(), height); 
     } 
     protected void paint(Graphics graphics) { 

      graphics.setBackgroundColor(background_color); 
      graphics.clear(); 
      invalidate(); 
      super.paint(graphics); 
     } 
     protected void onFocus(int direction) { 
      super.onFocus(direction); 
      background_color=Color.RED; 
      invalidate(); 
     } 
     protected void onUnfocus() { 
      invalidate(); 
      background_color=Color.GREEN; 

     } 
     protected boolean navigationClick(int status, int time) { 

      if(Touchscreen.isSupported()){ 
       return false; 
      }else{ 
       fieldChangeNotify(1); 
       return true; 
      } 

     } 
     protected boolean touchEvent(TouchEvent message) 
     { 
      if (TouchEvent.CLICK == message.getEvent()) 
      { 
       FieldChangeListener listener = getChangeListener(); 
       if (null != listener) 
        this.setFocus(); 
        listener.fieldChanged(this, 1); 
      } 
      return super.touchEvent(message); 
     } 
    }; 
    logInDetailManager.setChangeListener(this); 
    logInDetailManager.add(new LabelField("hello")); 
    logInDetailManager.add(new NullField(Field.FOCUSABLE)); 
    add(logInDetailManager); 
    add(new LabelField("good",Field.FOCUSABLE));  
} 

public void fieldChanged(Field field, int context) {    
    if(field==logInDetailManager){     
     UiApplication.getUiApplication().invokeLater(new Runnable() {       
      public void run() {         
       Dialog.inform("Hi how are you?");       
      }      
     });   
    } 
} 

} 
1

使用onFocus()onUnfocus保持焦點到你的HorizontalFieldManager。並使用navigationClick()點擊你的hfm。但要確保你在HorizontalFieldManager中設置Field.FOCUSABLE

取一個boolean檢查焦點狀態並在繪製方法中執行代碼。檢查以下代碼..

`

boolean _isFocus = false; 
     HorizontalFieldManager hfm = new HorizontalFieldManager(HorizontalFieldManager.FOCUSABLE | Field.FOCUSABLE) 
      { 
      public void onFocus(int direction) 
       { 
       _isFocus = true; 
        super.onFocus(direction); 
       } 
      public void onUnfocus() 
      { 

    _isFocus = false; 
      super.onUnfocus(); 

     } 
public void paint(Graphics g) 
       { 
        if(_isFocus) 
        { 
         // replace your bitmap image or bgcolor here 
              hfm.invalidate(); 
         super.paint(g); 
        } 
       else 
       { 
        // replace your bitmap image or bgcolor here 
              hfm.invalidate(); 
        super.paint(g); 
       } 
      } 

     protected boolean navigationClick(int status, int time) 
     { 
      Dialog.alert("You are in hfm"); 
      return true; 
     } 
    }` 

希望工程!

相關問題