在运行时如何给按钮添加边距?

12

我需要在一个LinearLayout上添加多个按钮,但是我想让这些按钮之间相距5px。我找不到设置Button边距的方式。有什么想法吗?

5个回答

21

使用button元素的layout_margin属性。那样不行吗?

<Button android:layout_margin="5px" (...)/>

编辑

在 Java 中创建按钮时,使用 LayoutParams 来指定边距等设置。

Button button = new Button();
(....)
params = new LinearLayout.LayoutParams();
params.leftMargin = 5;
(set params as you need)
parent.addView(button, params);

您使用的LayoutParams必须与您添加按钮的布局匹配(请参见http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html)。对于LinearLayout,请使用LinearLayout.LayoutParams并相应设置*Margin字段。


我是Android的新手!我很困惑,如果我已经有了XML文件,那么在动态创建时如何使用它?我的代码看起来像这样,btnSend = new Button(this);btnSend.setText("发送...");btnSend.setBackgroundResource (R.drawable.red_button);btnSend.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stub// 在此处编写代码...}}); - Droid-Bird
我编辑了我的帖子,提供有关动态按钮创建的信息。 - njzk2
2
非常感谢您的帮助。很抱歉它不能做我想要的!请看以下代码:LinearLayout.LayoutParams lParam = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT ); lParam.setMargins(20, 20, 20, 20);它会给LinearLayout添加边距,而不是按钮。例如,如果有两个并排的按钮,它不会在按钮之间添加空间!这正是我的目标!谢谢! - Droid-Bird
这变得复杂了。你能发一下你的代码吗?同时确保layoutParams要么被设置到按钮上,要么在addView方法中使用。 - njzk2

9

试试这个:

//Assuming your button is in a LinearLayout as stated
LinearLayout.LayoutParams params = myButton.getLayoutParams();
params.setMargins(0, 0, 0, 0) //left, top, right, bottom
myButton.setLayoutParams(params);

这也可以工作,但setLayoutParams是无用的。并且getLayoutParams可能为空。而且你怎么知道按钮有一个LinearLayout.LayoutParams? - njzk2
2
我这里不是在编写一个通过测试的程序,而是提供所需内容的一般想法。正如我在评论中所述,我假设他的按钮位于LinearLayout中,就像他在原始帖子中所述。在此链接中:http://developer.android.com/reference/android/view/View.html#getLayoutParams(),它指出“当View附加到父ViewGroup时,此方法不能返回null”。因此,在这种情况下,它不会为空。 - Kevin Coppock
@kcoppock,谢谢,我认为你是对的,它不会返回null,根据你的假设它在LinearLayout中。但是,由于按钮是稍后添加到该布局中的,在这种情况下,它将返回null。谢谢大家! - Droid-Bird
@kcoppock,如果我使用相对布局,应该如何编写? - sijo jose

4
MarginLayoutParams params = (MarginLayoutParams) vector8.getLayoutParams();
params.width = 200; params.leftMargin = 100; params.topMargin = 200;
vector8.setLayoutParams(params);

需要使用类型:MarginLayoutParams

这对我很有帮助。 - Ashish Sahu

0

谢谢,但填充会在按钮区域内添加空间,例如边缘和按钮文本之间的空间。 - Droid-Bird
尝试这个:setGravity(int):当文本小于视图时,指定如何将文本沿视图的x和/或y轴对齐。 - jsp

0
在运行时使用这段代码来设置边距。
  LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) btnContainer.getLayoutParams();
        params.setMargins(5, 50, 10, 0); //left, top, right, bottom
        view_whwre_set_margin.setLayoutParams(params);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接