如何以编程方式在其中添加FrameLayout和ImageViews?

时间:2012-06-21 14:58:13

标签: android android-layout

在SO中提出了很多类似的问题,但是也请花点时间阅读我的问题。

我需要以编程方式创建一个具有多个ImageView的UI,所有这些都位于屏幕的不同位置并具有相关的点击事件(它是一个游戏应用)。我发现FrameLayout是合适的选择,我可以自己设置边距并将其放置在所需的位置。

现在,我很困惑是否为我创建的每个FrameLayout设置ImageView,或者保留单个FrameLayout并在其中添加所有ImageView,但是将每个imageview 设置在不同的位置

在任何一种情况下,如何以编程方式在其中添加FrameLayout和ImageView,并设置其边距,使其可以放置在屏幕上的任何位置。

请注意,我的主画布,其中包含所有这些ImageViews的背景,并且画布是通过XML设置的LinearLayout,因此我的onCreate()已经有setContentView(R.layout.game_canvas);,而我' d使用addContentView()添加其他视图,但此方法也接受LayoutParams对象作为第二个参数,那么当我使用此方法添加FrameLayouts时,我应该为此设置什么?

我的问题可能会令人困惑,所以如果我需要详细说明,请告诉我。

1 个答案:

答案 0 :(得分:5)

FrameLayouts只能容纳一个View,所以这不是真正合适的选择。

使用RelativeLayout来保存所有ImageView。您可以通过在LayoutParams中设置边距来定位每个ImageView。

E.g。以下代码将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。