2011-06-19 12 views
1

これは非常に基本的なことですが、ネットを検索する答えが見つからないようです。ブラックベリーとエディットフィールド

基本的には、Horizo​​ntalFieldManager上に2つのEditFieldを隣り合わせに表示する際に問題があります。

私はEditFieldがそれが入っているコンテナの最大幅を使用すると信じています。これを念頭において、editFieldsを別々のVerticalFieldManagersに追加し、これらをHorizo​​ntalFieldManagerに追加すると効果があります。以下は、これを行っているコードの詳細です。しかし、不幸にも、userNameはうまく表示されますが、パスワードフィールドはディスペイに失敗します。何が間違っているのかに関するアイディア

  HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.USE_ALL_WIDTH));   
    VerticalFieldManager vfmUser = new VerticalFieldManager(); 
    VerticalFieldManager vfmPassw = new VerticalFieldManager(; 

    userName = new EditField("Username:", "", 5, EditField.FIELD_LEFT); 
    password = new PasswordEditField("Pass: ", "", 5, PasswordEditField.FIELD_RIGHT); 

    vfmUser.add(userName); 
    vfmPassw.add(password); 

    hfm.add(vfmUser); 
    hfm.add(vfmPassw); 
    add(hfm); 
+0

なぜ同じ行に2つのEditFieldを追加するのが良い方法ではないのですか? – BBdev

答えて

1

問題はEditFieldはまだVerticalFieldManagerも効果的にパスワードフィールドをオフに無理に勧め、それが利用可能な幅全体を使うようになり、幅のすべてを使用しようとするということです。

このようなことをするために私が知っている唯一の方法は、画面の幅を画面の50%に明示的に設定するクラスを作成することです。これを行うには、EditFieldとPasswordEditFieldのサブクラスを作成する方法と、Horizo​​ntalFieldManagerのサブクラスを作成する方法があります。前者のオプションは、異なるプラットフォーム間でより簡単で信頼性が高くなりますが、1つではなく2つのクラスが必要になります。同様にPasswordEditFieldため

protected void layout(int maxWidth, int maxHeight) { 
    super.layout(maxWidth, maxHeight); 
    this.setExtent(Display.getWidth()/2, this.getHeight()); 
} 

これを行うには、EditFieldのサブクラスを作成して、のようなものを見て、そのlayoutメソッドをオーバーライドすることをお勧めします。

どのように動作させるかによって、他の方法もオーバーライドする必要があります。例えば、このコードは(私はかなり確信しています、具体的にはテストしていません)、余分な文字が必要な領域に収まらない場合には切り捨てられます。それがあなたが望んでいない場合は、paintを上書きするか、現在のテキストに基づいてレイアウトを変更する必要があります。また、嵐の画面を傾けると、サイズの更新が正しく行われるようにテストする必要があります。ほとんどの場合はうまくいくはずですが、画面上に特定のマネージャの設定がある場合、レイアウトやサイズを更新しないバグがあります。

あなたがマネージャールートに行くことを決めた場合(これはおそらくさらに多くの問題に遭遇するので、特にお勧めしません)、ManagerまたはHorizo​​ntalFieldManagerを拡張することが望ましいでしょう前者を行うには、HFMのいくつかの癖に対処する必要はありません)、そのsublayoutメソッドをオーバーライドします。この方法では、マネージャのすべてのフィールド(あなたの場合はユーザフィールドとパスワードフィールド)にlayoutChildsetPositionChild(その順序で)を呼び出すことになります。最後に、setExtentに電話したいと思うでしょう。この問題については、私はあなたにブラックベリーのドキュメントを紹介したいと思いますが、すべての正直なところで、ブラックベリーのカスタムマネージャを実装する方法や、それについての質問をする方が良いでしょう。

すべてこれは、なぜあなたがこれをやりたいのかを再考することもできます。私は経験から、UIが正しく見えない携帯電話があることを保証することができます。私たちは一度同様のアプローチを試してみましたが、すべてのデバイスのUIの観点からは動作させることができなかったため、 lots of different resolutions - 非常に狭いものもあれば非常に広いものもあります。このUIを使用すると、一部のデバイスで非常に窮屈なログインが発生します。 IMHOでは、他のBlackBerryアプリケーションとの整合性と、異なる行にユーザー名とパスワードを設定することが望ましいでしょう。

0

Horizo​​ntalFieldManager hfm = new Horizo​​ntalFieldManager();

 userName = new EditField("Username:", "", 5, EditField.FIELD_LEFT) 
     { 
      protected void layout(int maxWidth, int maxHeight) { 
       super.layout(maxWidth, maxHeight); 
       this.setExtent(Display.getWidth()/2, this.getHeight()); 
      } 
     } 
     ; 
     password = new PasswordEditField("Pass: ", "", 5, PasswordEditField.FIELD_RIGHT) 

     { 
      protected void layout(int maxWidth, int maxHeight) { 
       super.layout(maxWidth, maxHeight); 
       this.setExtent(Display.getWidth()/2, this.getHeight()); 
      } 
     }; 


     hfm.add(userName); 
     hfm.add(password); 

     add(hfm); 

このコードを試してください。私はあなたの問題の解決策になります。

関連する問題