我正在尝试以编程方式构建线性布局,其中共有4个按钮,每个按钮都位于上一个按钮的下方。如下图所示:
从上图中可以看出,每个按钮的大小完全相同,但它们有不同的layout_margins,第一个按钮在layout_marginTop中的值较大,而其他3个按钮在layout_marginTop中具有相同的值。
基本上通过xml构建这样的布局非常简单但是现在我真的遇到了仅通过java代码构建所有这些的困难。我已经浏览了很多帖子,现在我可以轻松添加4个适当大小的按钮,但我找不到一个正确的方法来为每个按钮以编程方式设置layout_margin。
要简单地添加四个按钮,我可以这样做:
public class mainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL); //Can also be done in xml by android:orientation="vertical"
for (int i = 0; i < 3; i++) {
LinearLayout row = new LinearLayout(this);
row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
for (int j = 0; j < 4; j++) {
Button btnTag = new Button(this);
btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btnTag.setText("Button " + (j + 1 + (i * 4 )));
btnTag.setId(j + 1 + (i * 4));
row.addView(btnTag);
}
layout.addView(row);
}
setContentView(layout);
//setContentView(R.layout.main);
}
}
要以编程方式设置每个按钮(视图)的边距,我可以这样做:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(0, 2, 0, 0);
button.setLayoutParams(params);
但问题出现了:只要我为4个按钮设置了LayLayoutParams,然后通过“addView(按钮)”将4个按钮添加到Linearlayout中,只有第一个按钮可以以适当的大小显示并具有适当的边距。所有其他3个按钮都消失了。通过许多测试,我发现似乎在linearlayout对象中只允许一个layoutParams。因此,只要我为不同的按钮设置不同的布局参数,就只能显示第一个按钮。但是从这里开始,我的4个按钮的边缘参数肯定是不同的,因此我认为我必须为不同的按钮使用不同的布局参数。
那么请有人告诉我如何以编程方式为我的每个按钮设置边距并让它们正确显示?这已经吸了两天我的生命,请帮忙! :)
答案 0 :(得分:3)
linear = (LinearLayout) rootView.findViewById(R.id.linear);
.
.
.
RelativeLayout.LayoutParams layoutParam = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
LinearLayout layout = new LinearLayout(getActivity());
layout.setLayoutParams(layoutParam);
layout.setOrientation(LinearLayout.VERTICAL);
// Below will add three linear layout with 4 buttons in each
for (int i = 0; i < 3; i++) {
LinearLayout row = new LinearLayout(getActivity());
row.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
//Here is important
row.setOrientation(LinearLayout.VERTICAL);
for (int j = 0; j < 4; j++) {
Button btnTag = new Button(getActivity());
btnTag.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
btnTag.setText("Button " + (j + 1 + (i * 4)));
btnTag.setId(j + 1 + (i * 4));
row.addView(btnTag);
}
layout.addView(row);
}
linear.addView(layout);
// You can set also
// setContentView(layout)