以编程方式在线性布局中设置边距

2022-08-31 05:17:04

我正在尝试使用Java(不是XML)来创建一个线性布局,其中包含填充屏幕并具有边距的按钮。下面是没有边距的代码:

LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
for (int r = 0; r < 6; ++r) {
    Button btn = new Button(this);
    btn.setText("A");

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
    lp.weight = 1.0f; // This is critical. Doesn't work without it.
    buttonsView.addView(btn, lp);
}

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setContentView(buttonsView, lp);

所以这工作得很好,但是你到底如何给按钮留出边距,使它们之间有空间?我尝试使用,但没有成员,所以它不好。如果你在它的构造函数中传递它,它也不会起作用。LinearLayout.MarginLayoutParamsweightlp

这是不可能的吗?因为它看起来确实如此,而且它不会是您只能在XML中执行的第一个Android布局任务。


答案 1

下面是一些代码来完成它:

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

layoutParams.setMargins(30, 20, 30, 0);

Button okButton=new Button(this);
okButton.setText("some text");
ll.addView(okButton, layoutParams);

答案 2

所以这工作得很好,但是你到底如何给按钮留出边距,使它们之间有空间?

调用对象。setMargins()LinearLayout.LayoutParams

我尝试使用LinearLayout.MarginLayoutParams,但它没有权重成员,所以它不好。

LinearLayout.LayoutParams是 的子类,如文档中所示。LinearLayout.MarginLayoutParams

这是不可能的吗?

不。

它不会是你只能在XML中执行的第一个Android布局任务。

欢迎您提供此声明的证明。

就个人而言,我不知道任何只能通过XML而不是通过SDK中的Java方法完成的事情。事实上,根据定义,一切都必须通过Java完成(尽管不一定通过SDK可访问的方法),因为XML不是可执行代码。但是,如果您知道某些事情,请指出来,因为这是SDK中的一个错误,有朝一日应该会得到解决。