1

背景画像があり、2 つの LabelFields、BasicEditField、および ButtonField を 1 つの画面にオーバーレイします。私の問題は、画面を完全に埋めるのではなく、ボタンの下部の後に背景画像が途切れることです。(読みやすくするために余分なコードを削除しました)

    VerticalFieldManager bgManager = new VerticalFieldManager(Manager.USE_ALL_WIDTH | 
                                                              Manager.NO_VERTICAL_SCROLL | 
                                                              Manager.NO_VERTICAL_SCROLLBAR) {

        //Override the paint method to draw the background image.
        public void paint(Graphics graphics)
        {
            //Draw the background image and then call super.paint
            //to paint the rest of the screen.
            graphics.drawBitmap(0, 0, Display.getWidth(), Display.getHeight(), backgroundBitmap, 0, 0);
            super.paint(graphics);
        }
    };
    this.add(bgManager);

    LabelField header = new LabelField("", LabelField.USE_ALL_WIDTH | DrawStyle.HCENTER);
    header.setText("Search by Drug Name");
    bgManager.add(header);

    LabelField subtitle = new LabelField("", LabelField.USE_ALL_WIDTH | DrawStyle.HCENTER);
    subtitle.setText("(brand name or generic)");
    bgManager.add(subtitle);

    HorizontalFieldManager hfm = new HorizontalFieldManager();

    final BasicEditField edit = new BasicEditField("", "", 50, EditField.EDITABLE | BasicEditField.NO_NEWLINE) {
        //code to make background of text box white
        }
    };
    hfm.add(edit);

    ButtonField search = new ButtonField("Search");
    search.setChangeListener(new FieldChangeListener() {

        public void fieldChanged(Field field, int context) {
            //do something
        }
    });

Manager.USE_ALL_HEIGHTに追加すると、背景画像が画面いっぱいに表示されますが、画面bgManager全体が無限にスクロール可能になります。がないManager.USE_ALL_HEIGHTと、画面はまったくスクロールできません (正しい) が、コンテンツの最後で背景画像が途切れます。

スクロールできず、表示画面全体を占める背景画像を持つように、この画面を作成するにはどうすればよいですか?

間違っているように見えるのは次のとおりです。

ここに画像の説明を入力

これは正しいように見えます (ただし、スクロールは正しくありません)。

ここに画像の説明を入力

私が使用している背景画像は次のとおりです。

ここに画像の説明を入力

4

1 に答える 1

1

コードを変更する最も簡単な方法は、実際にはUSE_ALL_HEIGHTフラグを使用することだと思います。

  VerticalFieldManager bgManager =
    new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | 
                             Manager.NO_VERTICAL_SCROLLBAR | 
                             Manager.USE_ALL_WIDTH | 
                             Manager.USE_ALL_HEIGHT) {

画面が背景画像でいっぱいになります。

このコードは表示されていませんが、問題はbgManager実際にスクロールを許可しScreenているのではなく、垂直スクロールを許可していることだと思います。したがって、コードを配置するコンテナがスクロールを無効にしていることを確認してください。このようなもの:

public class BgCropScreen extends MainScreen {

   public BgCropScreen() {
      super(MainScreen.NO_VERTICAL_SCROLL);  // <<<<<< THIS IS THE CRITICAL LINE !!!!!!

      VerticalFieldManager bgManager = new VerticalFieldManager(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR | Manager.USE_ALL_WIDTH | Manager.USE_ALL_HEIGHT) {
         // to draw the background image.
         public void paint(Graphics graphics) {
            graphics.drawBitmap(0, 0, Display.getWidth(), Display.getHeight(), backgroundBitmap, 0, 0);
            super.paint(graphics);
         }                
      };
      this.add(bgManager);

これを行うためのドキュメントは次のとおりですBackgroundFactoryOSの新しいバージョンでは、ビットマップ、グラデーション、色などを使用して背景を作成する方法を使用する方がおそらく簡単であると指摘しています。ただし、別のオプションです。

于 2013-01-24T23:08:48.153 に答える