4

ログインフォームにEmail:とPassword:という名前の2つのEditFieldがあります。メールのすぐ下にログインボタンがあります。ログインするまで降りてきたとすると、パスワードフィールドまでしかスクロールできません。カーソルがEメールフィールドに到達しません。シミュレーターでは、トラックパッドだけでなく矢印キーも使ってみました。最初の編集フィールドに戻る方法を教えてください

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を使用しており、OS6.0用に開発しています。ログイン画面をFacebookのログインページのように見せたい。上にスクロールできない理由は何でしょうか。

4

4 に答える 4

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

このようにして、パスワード編集フィールドの最初の要素に到達すると、電子メールフィールドに焦点を合わせる必要があります。これは回避策として機能します。

この問題を解決するもう1つの方法は、水平フィールドマネージャーに2つのフィールドを追加することです。そうすれば、これで確実に機能すると思います。最初の方法を使用しない場合。あなたはHorizo​​ntalFieldManagerのコードの下に見つけることができます:

 et=new EditField("Email-id:","");
 pwd=new PasswordEditField("Password:",""); 
 HorizontalFieldManager manager = new HorizontalFieldManager();
 manager.add(et);
 manager.add(pwd);
 ab.add(manager, yourX, yourY);
于 2011-10-10T07:41:27.460 に答える
2

また、RIMのバグである可能性があります。どのOSを使用していますか?OS 5以降ですか?画面上の一部のUI要素(画面自体を含む)にカスタムのパディング/マージン/境界線を使用していますか?はいの場合は、パディング/マージン/境界線を設定するコードをコメントアウトして、これが当てはまるかどうかを確認してください。

于 2011-10-01T16:16:58.093 に答える
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
    }
}}
于 2011-10-06T08:11:02.967 に答える
-2

あなたが説明したことは、通常の動作ではありません。

私の結論は、コードには1つ以上のバグがあるということです。問題を解決するには、コードを変更してバグを修正する必要があります。その後、さまざまなフィールドを上下にスクロールできるようになります。

注:この質問が立っているので、正確なバグについてより具体的にすることはできません。代わりに、適切にスクロールし、デフォルトとして使用して、どの逸脱がバグの原因であるかを判断できる、説明したレイアウトの例を示します。

// inside MainScreen constructor
add(new EditField("Username:","",0));
add(new EditField("Password:","",0));
add(new ButtonField(buttonBMP,ButtonField.CONSUME_CLICK));
于 2011-10-01T13:40:49.223 に答える