Java Android-如何以编程方式在线性布局中添加多个具有不同布局边距的按钮?

Java Android-如何以编程方式在线性布局中添加多个具有不同布局边距的按钮?,java,android,button,android-linearlayout,margin,Java,Android,Button,Android Linearlayout,Margin,我试图以编程的方式构建一个线性布局,其中总共有4个按钮,每个按钮都简单地位于前一个按钮的下方。如下图所示: 从上图中可以看出,每个按钮的大小完全相同,但它们有不同的版面边距,第一个按钮在版面边距中的值较大,而其他3个按钮在版面边距中的值相同 基本上,通过xml构建这样的布局是非常简单的,但现在我真的遇到了仅通过java代码构建所有这些布局的困难。我已经阅读了很多文章,现在我可以轻松地添加4个大小合适的按钮,但我就是找不到一个合适的方法来编程设置每个按钮的版面边距 要简单地添加四个按钮,我可以这

我试图以编程的方式构建一个线性布局,其中总共有4个按钮,每个按钮都简单地位于前一个按钮的下方。如下图所示:

从上图中可以看出,每个按钮的大小完全相同,但它们有不同的版面边距,第一个按钮在版面边距中的值较大,而其他3个按钮在版面边距中的值相同

基本上,通过xml构建这样的布局是非常简单的,但现在我真的遇到了仅通过java代码构建所有这些布局的困难。我已经阅读了很多文章,现在我可以轻松地添加4个大小合适的按钮,但我就是找不到一个合适的方法来编程设置每个按钮的版面边距

要简单地添加四个按钮,我可以这样做:

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个按钮设置LayoutParams,然后通过“addView(button)”将4个按钮添加到Linearlayout中,只有第一个按钮可以以适当的大小和适当的边距显示。其他3个按钮都不见了。通过许多测试,我发现在linearlayout对象中似乎只允许一个layoutParams。因此,只要我为不同的按钮设置不同的布局参数,就只能显示第一个按钮。但是因为这里我的4个按钮的边距参数绝对不同,所以我认为我必须为不同的按钮使用不同的布局参数

所以,请告诉我,我如何通过编程为我的每个按钮设置边距,并使它们正确显示?这已经折磨了我两天了,请帮帮我!:)

linear=(LinearLayout)rootView.findviewbyd(R.id.linear);
.
.
.   
RelativeLayout.LayoutParams layoutParam=新的RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_父级,
RelativeLayout.LayoutParams.WRAP_内容);
LinearLayout布局=新的LinearLayout(getActivity());
layout.setLayoutParams(layoutParam);
布局。设置方向(线性布局。垂直);
//下面将添加三个线性布局,每个布局中有4个按钮
对于(int i=0;i<3;i++){
LinearLayout行=新的LinearLayout(getActivity());
row.setLayoutParams(新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_父级,
LinearLayout.LayoutParams.WRAP_内容);
//这里很重要
行。设置方向(线性布局。垂直);
对于(int j=0;j<4;j++){
按钮btnTag=新按钮(getActivity());
btnTag.setLayoutParams(新的LayoutParams(
LayoutParams.WRAP_内容,
LayoutParams.WRAP_内容);
btnTag.setText(“按钮”+(j+1+(i*4));
btnTag.setId(j+1+(i*4));
行。添加视图(btnTag);
}
布局。添加视图(行);
}
线性。添加视图(布局);
//您还可以设置
//setContentView(布局)
linear=(LinearLayout)rootView.findViewById(R.id.linear);
.
.
.   
RelativeLayout.LayoutParams layoutParam=新的RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_父级,
RelativeLayout.LayoutParams.WRAP_内容);
LinearLayout布局=新的LinearLayout(getActivity());
layout.setLayoutParams(layoutParam);
布局。设置方向(线性布局。垂直);
//下面将添加三个线性布局,每个布局中有4个按钮
对于(int i=0;i<3;i++){
LinearLayout行=新的LinearLayout(getActivity());
row.setLayoutParams(新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_父级,
LinearLayout.LayoutParams.WRAP_内容);
//这里很重要
行。设置方向(线性布局。垂直);
对于(int j=0;j<4;j++){
按钮btnTag=新按钮(getActivity());
btnTag.setLayoutParams(新的LayoutParams(
LayoutParams.WRAP_内容,
LayoutParams.WRAP_内容);
btnTag.setText(“按钮”+(j+1+(i*4));
btnTag.setId(j+1+(i*4));
行。添加视图(btnTag);
}
布局。添加视图(行);
}
线性。添加视图(布局);
//您还可以设置
//setContentView(布局)
linear=(LinearLayout)rootView.findViewById(R.id.linear);
.
.
.   
RelativeLayout.LayoutParams layoutParam=新的RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_父级,
RelativeLayout.LayoutParams.WRAP_内容);
LinearLayout布局=新的LinearLayout(getActivity());
layout.setLayoutParams(layoutParam);
布局。设置方向(线性布局。垂直);
//下面将添加三个线性布局,每个布局中有4个按钮
对于(int i=0;i<3;i++){
        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)