【问题标题】:How do I add FrameLayout and ImageViews within it Programmatically?如何以编程方式在其中添加 FrameLayout 和 ImageViews?
【发布时间】:2012-06-21 23:25:11
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

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

    使用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。

    【讨论】:

    • RelativeLayout 允许其子ImageViews 相互重叠几个像素(想想扑克牌,堆叠在手中)?
    • 是的,他们有。顺序由您添加它们的顺序决定。
    • @nmw 如何使用此代码添加片段。就像你在加载图片一样,我可以替换这段代码中的片段吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多