2

SOでも同様の質問がたくさんありますが、それでも、時間をかけて私の質問を読んでください。

複数のUIをプログラムで作成する必要がありますImageView。これらはすべて画面の異なる場所に配置され、関連するクリックイベント(ゲームアプリ)があります。自分でFrameLayoutマージンを設定して、希望の場所に配置できるというのが適切な選択だと思いました。

今、私が作成するFrameLayoutすべての単一に対して持つべきかImageView、単一のFrameLayoutを保持し、その中にすべてのImageViewを追加するべきか、しかし各imageviewを異なる位置に設定するかどうか混乱しています。

どちらの場合でも、プログラムでFrameLayoutとImageViewを追加し、画面のどこにでも配置できるようにマージンを設定するにはどうすればよいですか。

これらすべてのImageViewを運ぶメインキャンバスには背景があり、キャンバスはLinearLayoutXMLを介して設定されているため、onCreate()すでに持っており、ビューを追加するためsetContentView(R.layout.game_canvas);に使用しますが、このメソッドも2番目のパラメーターとしてオブジェクトを受け入れます。 、では、このメソッドを使用してFrameLayoutsを追加する場合、これには正確に何を設定する必要がありますか?addContentView()LayoutParams

私の質問は混乱を招く可能性がありますので、詳しく説明する必要がある場合はお知らせください。

4

1 に答える 1

6

FrameLayoutsは1つのビューのみを保持するように設計されているため、これは実際には適切な選択ではありません。

RelativeLayoutを使用して、すべてのImageViewを保持します。LayoutParamsでマージンを設定することにより、各ImageViewを配置できます。

たとえば、次のコードは、ImageViewを座標50,50に配置します。

RelativeLayout imgLayout = new RelativeLayout(this);

ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.an_image);

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

lp.setMargins(50, 50, 0, 0);
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);

imgLayout.addView(iv, lp);

次に、addView()メソッドを使用して、このRelativeLayoutをメインのLinearLayoutに追加できます。

于 2012-06-21T15:11:03.413 に答える