Как я могу установить Фокус в Пользовательском Горизонтальном Диспетчере полей и Событие Клика в Blackberry? - PullRequest
0 голосов
/ 31 марта 2012

Привет, у меня на экране было «Создать пользовательские макеты», я хочу изменить цвет или изображение горизонтального диспетчера полей при его фокусировке, а также выполнить событие 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));

Любая помощь приветствуется. Спасибо заранее

enter image description here

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

Вот как вы можете сделать это, этот код предназначен для изменения цвета при выборе 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 голос
/ 31 марта 2012

Используйте onFocus() и onUnfocus, чтобы сохранить фокусировку на HorizontalFieldManager.и используйте navigationClick(), чтобы нажать на свой HFM.но убедитесь, что вы хотите установить Field.FOCUSABLE в вашем HorizontalFieldManager.

возьмите один 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;
        }
    }`

надеюсь, что это работает !!!

...