0

オートコンプリート フィールドの高さを減らしたいです。

ここに私のコードがあります

HorizontalFieldManager hfm = new HorizontalFieldManager();
LabelField lbl = new LabelField(" Name:                 ");

final AutoCompleteField TextField1 = new AutoCompleteField(filterLst)
{
    public int getPreferredWidth() 
    {
        return Display.getWidth()/2;
    }

    public void sublayout(int maxWidth, int maxheight)
    {
        super.sublayout(getPreferredWidth(), getPreferredHeight());
        setExtent(getPreferredWidth(), getPreferredHeight());
    }
};
hfm.add(lbl);
hfm.add(TextField1);
add(hfm); 

下の写真はその様子です。他のラベルに使用されている編集フィールドと同じサイズに見えるようにします。

editfieldのコードは次のとおりです

   //Add box next to field for containing input 
   HorizontalFieldManager hfm1 = new HorizontalFieldManager();
   LabelField lbl1 = new LabelField(" Amount:              ");

   final EditField TextField2 = new EditField()
   {
      boolean _drawFocus = false;
      protected void layout(int maxWidth, int maxHeight) 
      {
         super.layout(Math.min(maxWidth, 300), Math.min(maxHeight, 30));
      }
      protected boolean keyChar(char ch, int status, int time) 
      {
         if (CharacterUtilities.isDigit(ch) || (ch == Characters.BACKSPACE)) 
         {
            return super.keyChar(ch, status, time);
         }
         return true;
      }
      protected void drawFocus(Graphics graphics,boolean on) 
      {
         _drawFocus = on;
         super.drawFocus(graphics, on);
         _drawFocus = false;
      }    
      protected void paint(Graphics g)
      {       
         if ( _drawFocus ) 
         {
            super.paint(g);
            return;
         } 
         g.clear();
         g.drawRect(0,0, 50, 50);
         int oldColor = g.getColor();
         g.setColor(Color.WHITE);
         g.fillRect(0, 0, this.getPreferredWidth(), this.getPreferredHeight());
         g.setColor(oldColor);
         g.drawRect(100, 100, 50, 50);
         super.paint(g);
      }
   };
   TextField2.setBorder(BorderFactory.createRoundedBorder(new XYEdges(6,6,6,6)));
   hfm1.add(lbl1);
   hfm1.add(TextField2);
   add(hfm1);

ここに画像の説明を入力

名前に使用するオートコンプリート フィールドのサイズを他のフィールドと同じにしたいのですが、助けてください。

ありがとう

4

1 に答える 1

1

おそらく問題を引き起こしていることの 1 つEditFieldは、人々が通常Field. AutoCompleteFieldただし、 は のように処理されますManagerManagerもちろん、(おそらく) が含まれているため、 になりたいのですが、オートコンプリートオプションを動的に表示する EditField別の子も含まれます。Field

(Non-Manager)Fieldとサブクラスではレイアウトの処理が少し異なるため、通常のand and でこれを修正しようとしてもうまくいかないことManagerがわかりました。getPreferredHeight()layout()sublayout()

だから、私がしたことは2つあります:

  1. まず、サブクラスでデフォルトの装飾を模倣しようとしましAutoCompleteFieldEditField。完璧ではありません。それらをまったく同じに見せたい場合はpaint()、両方のカスタム メソッドを作成する必要がある場合があります。あなたは問題を単にフィールドのサイズを変更したいだけだと述べたので、それで十分だと思いました。
  2. 第 2 に、AutoCompleteField子 EditField が含まれているように見えるため (少なくとも論理的には...そのように実装されているかどうかはわかりません)、通常の編集フィールド。そのために、各フィールドに同じ高さを設定するだけで、すべてのフィールドの高さを制御しFontました。

あなたのコードへの私の変更:

  final int fontSize = 24;   // pick whatever you like here
  final int pad = 2;
  final int margin = 2;

高さを制御しようとしていた編集フィールドのlayout()メソッド内のコードを削除しました。前述のように、同様の方法でオートコンプリート フィールドの高さを設定することに成功しなかったためです。編集フィールドlayout()を非常に標準的な実装に変更しました。

  final EditField TextField2 = new EditField()
  {
     boolean _drawFocus = false;
     protected void layout(int maxWidth, int maxHeight) 
     {
        super.layout(getPreferredWidth(), getPreferredHeight());
     }

AutoCompleteField次に、編集フィールドにパディングを設定します。これは、(5.0 Storm2 で) 2 ピクセルのパッドを使用しているように見えるためです。この UI は気にしないかもしれませんが、2 ピクセルの余白があるようにも見えます。

  TextField2.setPadding(pad, pad, pad, pad);
  TextField2.setMargin(margin, margin, margin, margin);

次に、すべてのフィールドに同じフォントを設定します。デフォルトのフォントである必要はありません。それらをすべて同じにするだけです。AutoCompleteFieldこのステップは、フォントを設定することによって描画される角丸長方形フィールドの表示サイズを決定するように見えたものです。

  Font font = Font.getDefault().derive(Font.PLAIN, fontSize);
  TextField1.setFont(font);
  TextField2.setFont(font);

その後、編集フィールドとオートコンプリート フィールドの高さを一定にする必要があります。私はこれを 5.0 9550 でテストしました。パッドとマージンの値は実験的に決定されたので、これらの値 (たとえば 2 ピクセル) はデバイスによって異なる可能性があると完全に信じています。少し実験する必要があるかもしれません。

于 2012-05-30T07:49:45.113 に答える