在SO中提出了很多类似的问题,但是也请花点时间阅读我的问题。
我需要以编程方式创建一个具有多个ImageView
的UI,所有这些都位于屏幕的不同位置并具有相关的点击事件(它是一个游戏应用)。我发现FrameLayout
是合适的选择,我可以自己设置边距并将其放置在所需的位置。
现在,我很困惑是否为我创建的每个FrameLayout
设置ImageView
,或者保留单个FrameLayout并在其中添加所有ImageView,但是将每个imageview 设置在不同的位置
在任何一种情况下,如何以编程方式在其中添加FrameLayout和ImageView,并设置其边距,使其可以放置在屏幕上的任何位置。
请注意,我的主画布,其中包含所有这些ImageViews的背景,并且画布是通过XML设置的LinearLayout
,因此我的onCreate()
已经有setContentView(R.layout.game_canvas);
,而我' d使用addContentView()
添加其他视图,但此方法也接受LayoutParams
对象作为第二个参数,那么当我使用此方法添加FrameLayouts时,我应该为此设置什么?
我的问题可能会令人困惑,所以如果我需要详细说明,请告诉我。
答案 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。