2

SO中有很多类似的问题,但也请花点时间阅读我的问题。

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

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

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

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

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

4

1 回答 1

6

FrameLayouts 被设计为只容纳一个视图,因此这并不是真正的合适选择。

使用 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 回答