Свиток Editfield не достигает вершины в ежевике

У меня есть 2 EditFields в моей форме входа в систему с именами Email: и Password:. Чуть ниже электронной почты у меня есть кнопка входа. Предположим, что я дошел до входа в систему, я могу прокрутить назад только до поля пароля. Курсор не достигает поля электронной почты. В симуляторе я пытался использовать клавиши со стрелками, а также трекпад. Помогите пожалуйста как прокрутить обратно до первого поля редактирования

AbsoluteFieldManager ab = new AbsoluteFieldManager();

  add(ab);
  new SeparatorField();

     et=new EditField("Email-id:","");
     pwd=new PasswordEditField("Password:",""); 

     ab.add(et,35,110); 
     ab.add(pwd,35,150); 

Я использую AbsoluteFieldManager и разрабатываю для OS 6.0. Я хочу, чтобы экран входа был похож на страницу входа в Facebook. Пожалуйста, дайте мне знать, что может быть причиной того, что вы не можете прокрутить вверх

4 ответа

Решение

Может быть, это ошибка RIM с AbsoluteFieldManager. Никогда не использовал его раньше, поэтому я не знаю об этом. Вы можете создать обходной путь для решения этой проблемы. Найдите это ниже:

et=new EditField("Email-id:","");
pwd=new PasswordEditField("Password:","") {
    protected int moveFocus(int amount, int status, int time) {
        int cursorPosition = this.getCursorPosition();
        if ((cursorPosition == 0) && (amount < 0)) {
            et.setFocus();
            return 0;
        }
        else {
            return super.moveFocus(amount, status, time);
        }
    }
}; 

Таким образом, когда вы придете к первому элементу в поле редактирования пароля, вы обязуете поле электронной почты сосредоточиться. Это будет работать для вас как обходной путь.

Еще один способ решить эту проблему - добавить два поля в горизонтальный диспетчер полей. Таким образом, я думаю, это наверняка сработает. Если нет, используйте первый метод. Ниже вы можете найти код для HorizontalFieldManager:

 et=new EditField("Email-id:","");
 pwd=new PasswordEditField("Password:",""); 
 HorizontalFieldManager manager = new HorizontalFieldManager();
 manager.add(et);
 manager.add(pwd);
 ab.add(manager, yourX, yourY);

Это также может быть ошибка RIM. Какую ОС вы используете? Это ОС 5+? Используете ли вы пользовательские отступы / поля / границы для некоторых элементов интерфейса на экране (включая сам экран)? Если да, попробуйте закомментировать любой код, который устанавливает отступы / поля / границы, чтобы проверить, так ли это.

Вы можете использовать этот код для вашей страницы входа в систему:

public class loginscreen extends MainScreen implements FieldChangeListener {

private int deviceWidth = Display.getWidth();
private int deviceHeight = Display.getHeight();
private VerticalFieldManager subManager;
private VerticalFieldManager mainManager;
public long mycolor = 0x00FFFFFF;

Screen _screen = home.Screen;
TextField heading = new TextField(Field.NON_FOCUSABLE);

TextField username_ef = new TextField();
PasswordEditField password_ef = new PasswordEditField();
CheckboxField rememberpass = new CheckboxField();   
public ButtonField login_bt = new ButtonField("Login", ButtonField.CONSUME_CLICK);
public ButtonField register_bt = new ButtonField("Register", ButtonField.CONSUME_CLICK);

public loginscreen()
{
    super();
    final Bitmap backgroundBitmap = Bitmap.getBitmapResource("bgd.png");

    HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR )

    {

    protected void sublayout(int width, int height) 

    {

    Field field;

    int numberOfFields = getFieldCount();

    int x = 245;

    int y = 0;

    for (int i = 0;i < numberOfFields;i++) 

    {

    field = getField(i);

    setPositionChild(field,x,y); 

    layoutChild(field, width, height);

    x +=_screen.getWidth()-381;

    y += 0;//l17

    }

    width=_screen.getWidth();

    height=48;//w19

    setExtent(width, height);

    }

    };


   mainManager = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR )
    {

        public void paint(Graphics graphics)
        {
            graphics.clear();
            graphics.drawBitmap(0, 0, deviceWidth, deviceHeight, backgroundBitmap, 0, 0);                       
            super.paint(graphics);
        }            
    };
  //this manger is used for adding the componentes
    subManager = new VerticalFieldManager(Manager.VERTICAL_SCROLL | Manager.VERTICAL_SCROLLBAR )
    {
        protected void sublayout( int maxWidth, int maxHeight )
        {
            int displayWidth = deviceWidth;
            int displayHeight = deviceHeight;

            super.sublayout( displayWidth, displayHeight);
            setExtent( displayWidth, displayHeight);
        }

        public void paint(Graphics graphics)

        {
            graphics.setColor((int) mycolor);
        super.paint(graphics);

        }
    }; 


    username_ef.setLabel("Username: ");
    password_ef.setLabel("Password: ");
    rememberpass.setLabel("Remember Password");
    heading.setLabel("Please enter your credentials: ");

    username_ef.setMaxSize(8);
    password_ef.setMaxSize(20);

    subManager.add(heading);
    subManager.add(username_ef);
    subManager.add(password_ef);
    subManager.add(rememberpass);
    subManager.add(new SeparatorField());
    login_bt.setChangeListener(this);   
    register_bt.setChangeListener(this); 

    hfm.add(login_bt);
    hfm.add(register_bt);
    subManager.add(hfm);

    mainManager.add(subManager);
    this.add(mainManager);

}

public boolean onSavePrompt()
{
    return true;
} 


public void fieldChanged(Field field, int context) {
    // TODO Auto-generated method stub 
    if(field == login_bt)
    {
        //do your code for login button click           
    }

    if(field == register_bt)
    {
        //code for register button click
    }
}}

То, что вы описали, не является нормальным поведением.

Я пришел к выводу, что в вашем коде есть одна или несколько ошибок, чтобы решить вашу проблему, вы должны изменить код, чтобы исправить ошибки. После этого вы сможете прокручивать вверх и вниз по различным полям.

примечание: поскольку этот вопрос стоит, я не могу быть более конкретным в отношении точных ошибок. Поэтому вместо этого я покажу вам пример макета, который вы описали, который будет правильно прокручиваться, и вы можете использовать его по умолчанию, чтобы определить, какие из ваших отклонений вызвали ваши ошибки.

// inside MainScreen constructor
add(new EditField("Username:","",0));
add(new EditField("Password:","",0));
add(new ButtonField(buttonBMP,ButtonField.CONSUME_CLICK));
Другие вопросы по тегам