2011-10-01 6 views
4

로그인 양식에 Email : 및 Password :라는 두 개의 EditField가 있습니다. 이메일 바로 아래에 로그인 버튼이 있습니다. 로그인 할 때까지 내려 왔다고 가정하고 암호 필드까지만 뒤로 스크롤 할 수 있습니다. 커서가 전자 메일 필드에 도달하지 못했습니다. 시뮬레이터에서 트랙 패드뿐만 아니라 화살표 키를 사용해 보았습니다. 첫째 editfieldEditfield 스크롤이 블랙 베리에 도달하지 못합니다.

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 로그인 페이지처럼 보이길 원합니다. 스크롤 할 수없는 이유가 무엇인지 알려 주시기 바랍니다.

답변

2

는 어쩌면 그것은 AbsoluteFieldManager와 RIM의 버그입니다. 전에는 사용하지 않았으므로 나는 그것에 대해 모른다. 이 문제를 해결하기 위해 해결 방법을 만들 수 있습니다. 이 방법으로

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); 
-2

설명하신 내용은 일반적인 동작과 다릅니다.

내 결론은 코드에 하나 이상의 버그가 있다는 것입니다. 문제를 해결하려면 코드를 수정하여 버그를 수정해야합니다. 그런 다음 다양한 필드를 위아래로 스크롤 할 수 있습니다.

참고 :이 질문은 내가 정확한 버그에 대해 더 구체적 일 수는 없다는 것을 의미합니다. 따라서 대신에 스크롤을 적절하게 수행 할 수있는 레이아웃의 예를 보여줄 것이며 기본값으로 사용하여 편차로 인해 발생한 버그를 파악할 수 있습니다.

// inside MainScreen constructor 
add(new EditField("Username:","",0)); 
add(new EditField("Password:","",0)); 
add(new ButtonField(buttonBMP,ButtonField.CONSUME_CLICK)); 
+0

(나의 downvote)하지만,이 응답이 매우 불공평 @RobertMartin, 내가 문제 때문에 버그에 대한 특정 할 수없는 질문 –

+0

대답에 특히 도움이되지 않습니다 어떤 코드도 포함되어 있지 않습니다. 광범위한 질문을 던지고 폭 넓은 대답을하고 응답자를 탓하지 마십시오. 제발, 100000에 도착해야합니다. –

2

또한 RIM 버그 일 수 있습니다. 어떤 OS를 사용합니까? OS 5 이상입니까? 화면의 일부 UI 요소 (화면 자체 포함)에 맞춤 여백/여백/테두리를 사용합니까? 그렇다면 패딩/여백/경계를 설정하는 코드를 주석으로 처리하여이 경우인지 여부를 확인하십시오.

+0

AbsoluteFieldManager를 사용하고 있습니다. 두 개의 AbsoluteFieldManager (사용자 이름, 암호 및 다른 하나는 로그인 버튼, 암호 섹션을 잊은 경우)를 만들면 사용자 이름 ...으로 스크롤 할 수 있지만 로그인 필드는 다음 페이지로 이동합니다. –

+0

AbsoluteFieldManager ', 왜냐하면이 클래스의 사용법은 나에게 해킹으로 보이기 때문이다. ** AbsoluteFieldManager를 사용한다는 사실과 관련된 ** 아마도 ** 귀하의 사례입니다. 미안하지만 사전에 약간의 불쾌감을 느낀다면 자신에게 물어보십시오. 정말 필요한가요? 아니면 기본 구성 요소를 사용하여 화면 레이아웃을 만들 수있는 수준에서 BB UI API를 이해할 수 없기 때문입니까? –

+0

이것이 AbsoluteFieldManager를 사용하는 이유입니다. 내 앱 로고가 가운데 상단에 표시되며 사용자 로그인 자격 증명을 유지해야합니다. 레이아웃에 따라이 관리자에 대해 알게되었습니다. 어쨌든 도와 주셔서 감사합니다. 고맙습니다. –

0

당신은 당신의 로그인 페이지에이 코드를 사용할 수 있습니다

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 
    } 
}} 
관련 문제