【问题标题】:Only last added button is shown仅显示最后添加的按钮
【发布时间】:2014-10-08 16:09:41
【问题描述】:

我正在尝试以编程方式将 9 个按钮添加到 FrameLayout,但只显示最后一个。

下面的代码是针对第一个按钮的,我对所有其他按钮都是这样做的,但坐标不同。

我想用这些精确坐标添加每个按钮。

抱歉英语不好;)

    FrameLayout.LayoutParams rel_btn = new FrameLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    Button button1 = new Button(this);
    button1.setBackgroundResource(R.drawable.empty);
    rel_btn.width = screenWidth/4;
    rel_btn.height = screenWidth/4; 
    rel_btn.leftMargin = screenWidth/8;
    rel_btn.topMargin = screenHeight-1100;              
    button1.setLayoutParams(rel_btn);
    rl.addView(button1);

【问题讨论】:

  • 您能否详细说明您的应用的功能以及为什么需要精确的基于像素的按钮布局?
  • 我是初学者,为了学习,我正在尝试做一个井字游戏。我希望它在不同分辨率的不同设备上表现良好。
  • 我编辑了我的答案,建议使用基于 xml 的布局,使用 dp's 而不是像素,如果您希望它在不同的屏幕尺寸上正常工作。

标签: java android button android-framelayout layoutparams


【解决方案1】:

FrameLayout“旨在阻止屏幕上的一个区域以显示单个项目”。最后一个子视图显示在所有早期视图之上。如果您希望它们全部显示在垂直列表中,LinearLayout 会更适合您正在尝试做的事情。

编辑:如果您希望它在不同的屏幕尺寸和分辨率上可靠地工作,您不应该使用像素,您应该使用dps 而不是像素在 xml 中定义您的布局。您可以将根布局设置为 RelativeLayout,并为每个按钮定义关系,例如 android:toRightOf="<id of button>"

【讨论】:

  • 我怀疑stacking 是这里的问题。 OP 说:The code I show you is for the first button and I am doing like that for other button of course with different coordinates.
  • 堆叠听起来与 OP 描述的问题“但只显示最后一个”
  • 是的。除了 OP 说他/她对每个 Button 使用不同的坐标。
【解决方案2】:

我找到了可以解释您的问题的答案:FrameLayout margin not working

FrameLayout 可能会忽略边距,因为您没有指定重力。尝试添加重力:rel_btn.gravity = Gravity.TOP;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2023-01-22
    相关资源
    最近更新 更多