首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android-如何以编程方式在一个layout_margins中添加几个具有不同LinearLayout的按钮?

Android-如何以编程方式在一个layout_margins中添加几个具有不同LinearLayout的按钮?
EN

Stack Overflow用户
提问于 2015-03-25 05:42:16
回答 1查看 1.1K关注 0票数 0

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

从上面的图片中可以看到,每个按钮的大小完全相同,但它们有不同的layout_margins,第一个按钮在layout_marginTop中的值更大,而其他3个按钮在layout_marginTop中的值相同。

基本上,用xml构建这样的布局是非常简单的,但是现在我真的遇到了困难,只有通过java代码才能构建这一切。我已经浏览了很多帖子,现在我可以轻松地添加4个大小合适的按钮,但我只是找不到一个合适的方法来为每个按钮设置layout_margin。

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

代码语言:javascript
复制
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);
}
}

要以编程方式为每个按钮(视图)设置页边距,我可以这样做:

代码语言:javascript
复制
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(0, 2, 0, 0);
button.setLayoutParams(params); 

但问题来了:只要我对4个按钮进行setLayoutParams,然后通过“addView(按钮)”将4个按钮添加到直线布局中,那么只有第一个按钮才能以适当的大小显示,并具有适当的边距。其他三个按钮都不见了。通过许多测试,我发现在线性布局对象中似乎只能允许一个layoutParams。因此,只要我为不同的按钮设置不同的布局参数,就只能显示第一个按钮。但是由于这里我的4个按钮的边距是绝对不同的,所以我想我必须对不同的按钮使用不同的布局平行线。

所以,请有人告诉我,我如何以编程方式为我的每个按钮设置页边距,并使它们正确地显示?这已经让我的生活糟透了两天了,请帮帮忙!:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-25 06:06:36

代码语言:javascript
复制
        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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29248262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档