Java 如何将动态创建的按钮按行放置在布局上?

Java 如何将动态创建的按钮按行放置在布局上?,java,android,android-layout,Java,Android,Android Layout,我正在尝试添加24个带有for循环的按钮。我试着每行放置四个大小相等的按钮,希望看到下一组四个按钮出现在它们下面 我怎样才能做到这一点 到目前为止,我的不工作努力如下所示: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ScrollView sv = new ScrollView(this); LinearLayou

我正在尝试添加24个带有for循环的按钮。我试着每行放置四个大小相等的按钮,希望看到下一组四个按钮出现在它们下面

我怎样才能做到这一点

到目前为止,我的不工作努力如下所示:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ScrollView sv = new ScrollView(this);
        LinearLayout layout = new LinearLayout(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
                  (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        layout.setWeightSum(12.0f);
        params.weight = 3.0f;
        layout.setOrientation(LinearLayout.HORIZONTAL);
        sv.addView(layout);
        for (int i = 0; i < 24; i++) {
            Button btn = new Button(this);
            btn.setText("Button");
            btn.setLayoutParams(params);
            layout.addView(btn);
        }
        this.setContentView(sv);
    }
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ScrollView sv=新的ScrollView(此);
LinearLayout布局=新的LinearLayout(本);
LinearLayout.LayoutParams params=新的LinearLayout.LayoutParams
(LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
布局。设置权重总和(12.0f);
参数重量=3.0f;
布局。设置方向(线性布局。水平);
sv.addView(布局);
对于(int i=0;i<24;i++){
按钮btn=新按钮(此按钮);
btn.setText(“按钮”);
btn.setLayoutParams(参数);
布局。添加视图(btn);
}
这个.setContentView(sv);
}

非常感谢您的帮助。

为每行添加一个垂直线性布局怎么样?
定义布局的大小,并为每个按钮赋予权重1

为每行添加垂直线性布局如何?
定义布局的大小,并为每个按钮赋予权重1

这就是您如何添加所需的
按钮的方法:

    layout.setOrientation(LinearLayout.VERTICAL);
    sv.addView(layout);
    for (int i = 0; i < 6; i++) {
         Linearlayout row = new LinearLayout(this);
         row.setLayoutParams(new LinearLayout.LayoutParams
                  (LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));    
         for (int  j = 0; j < 4; j++) {
                Button btn = new Button(this);
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams
                  (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                lp.weight = 1; 
                btn.setLayoutParams(lp); 
                btn.setText("Button");
                btn.setLayoutParams(params);
                row.addView(btn);
         }
         layout.addView(row);
    }
    this.setContentView(sv);
布局。设置方向(线性布局。垂直);
sv.addView(布局);
对于(int i=0;i<6;i++){
Linearlayout行=新的Linearlayout(该行);
row.setLayoutParams(新的LinearLayout.LayoutParams
(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
对于(int j=0;j<4;j++){
按钮btn=新按钮(此按钮);
LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams
(LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
lp.重量=1;
btn.setLayoutParams(lp);
btn.setText(“按钮”);
btn.setLayoutParams(参数);
行。添加视图(btn);
}
布局。添加视图(行);
}
这个.setContentView(sv);

这是您添加所需的
按钮的方式:

    layout.setOrientation(LinearLayout.VERTICAL);
    sv.addView(layout);
    for (int i = 0; i < 6; i++) {
         Linearlayout row = new LinearLayout(this);
         row.setLayoutParams(new LinearLayout.LayoutParams
                  (LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));    
         for (int  j = 0; j < 4; j++) {
                Button btn = new Button(this);
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams
                  (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                lp.weight = 1; 
                btn.setLayoutParams(lp); 
                btn.setText("Button");
                btn.setLayoutParams(params);
                row.addView(btn);
         }
         layout.addView(row);
    }
    this.setContentView(sv);
布局。设置方向(线性布局。垂直);
sv.addView(布局);
对于(int i=0;i<6;i++){
Linearlayout行=新的Linearlayout(该行);
row.setLayoutParams(新的LinearLayout.LayoutParams
(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
对于(int j=0;j<4;j++){
按钮btn=新按钮(此按钮);
LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams
(LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
lp.重量=1;
btn.setLayoutParams(lp);
btn.setText(“按钮”);
btn.setLayoutParams(参数);
行。添加视图(btn);
}
布局。添加视图(行);
}
这个.setContentView(sv);

尝试以下内容,只需将其作为基本演示:

public class ABCActivity extends Activity {
int myid = 2001;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    RelativeLayout scrollHolder = new RelativeLayout(this);
    scrollHolder.setId(++myid);
    RelativeLayout.LayoutParams scrollHolderParams = new RelativeLayout.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
    scrollHolder.setLayoutParams(scrollHolderParams);
    scrollHolder.setBackgroundColor(Color.DKGRAY);
    scrollHolder.setGravity(Gravity.CENTER_VERTICAL);

    // ScrollView
    ScrollView scroll = new ScrollView(this);
    scroll.setId(++myid);
    scroll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    scroll.setBackgroundColor(Color.GREEN);

    // RelativeLayout
    RelativeLayout etHolder = new RelativeLayout(this);
    etHolder.setId(++myid);
    RelativeLayout.LayoutParams etHolderParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    etHolder.setLayoutParams(etHolderParams);
    etHolder.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
    etHolder.setPadding(0, 0, 0, 25);

    // Creating EditTextes and Adding to etHolder AS you have done
    RelativeLayout rl2 = addEditText(etHolder, null, 1);
    RelativeLayout rl3 = addEditText(etHolder, rl2, 2);
    RelativeLayout rl4 = addEditText(etHolder, rl3, 3);
    RelativeLayout rl5 = addEditText(etHolder, rl4, 4);
    RelativeLayout rl6 = addEditText(etHolder, rl5, 5);
    RelativeLayout rl7 = addEditText(etHolder, rl6, 6);
    RelativeLayout rl8 = addEditText(etHolder, rl7, 7);
    RelativeLayout rl9 = addEditText(etHolder, rl8, 8);
    RelativeLayout rl10 = addEditText(etHolder, rl9, 9);
    RelativeLayout rl11 = addEditText(etHolder, rl10, 10);
    RelativeLayout rl12 = addEditText(etHolder, rl11, 11);
    RelativeLayout rl13 = addEditText(etHolder, rl12, 12);

    scroll.addView(etHolder); // adding RelativeLayout = etHolder to ScrollView = scroll

    scrollHolder.addView(scroll); // adding ScrollView = scroll to RelativeLayout = scrollHolder

    setContentView(scrollHolder);

}

// Method as you have done
private RelativeLayout addEditText(RelativeLayout objRLContent,
        RelativeLayout layoutAbove, int i) {

    RelativeLayout objRLEditText = new RelativeLayout(this);
    objRLEditText.setId(1100 + i);
    RelativeLayout.LayoutParams objRLEditTextParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    if (layoutAbove != null)
        objRLEditTextParams.addRule(RelativeLayout.BELOW,
                layoutAbove.getId());
    objRLEditText.setLayoutParams(objRLEditTextParams);
    objRLEditText.setPadding(8, 2, 8, 2);

    Button objBtn = new Button(this);
    objBtn.setId(1300 + i);
    RelativeLayout.LayoutParams objETDataParams = new RelativeLayout.LayoutParams(
            200, LayoutParams.WRAP_CONTENT);
    objBtn.setLayoutParams(objETDataParams);
    objBtn.setPadding(8, 0, 8, 0);
    objBtn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    objBtn.setText("" + i);
    objBtn.setSingleLine(true);
    objRLEditText.addView(objBtn);
    objRLContent.addView(objRLEditText);

    return objRLEditText;

}
}

尝试以下内容,只需将其作为基本演示:

public class ABCActivity extends Activity {
int myid = 2001;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    RelativeLayout scrollHolder = new RelativeLayout(this);
    scrollHolder.setId(++myid);
    RelativeLayout.LayoutParams scrollHolderParams = new RelativeLayout.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
    scrollHolder.setLayoutParams(scrollHolderParams);
    scrollHolder.setBackgroundColor(Color.DKGRAY);
    scrollHolder.setGravity(Gravity.CENTER_VERTICAL);

    // ScrollView
    ScrollView scroll = new ScrollView(this);
    scroll.setId(++myid);
    scroll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    scroll.setBackgroundColor(Color.GREEN);

    // RelativeLayout
    RelativeLayout etHolder = new RelativeLayout(this);
    etHolder.setId(++myid);
    RelativeLayout.LayoutParams etHolderParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    etHolder.setLayoutParams(etHolderParams);
    etHolder.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
    etHolder.setPadding(0, 0, 0, 25);

    // Creating EditTextes and Adding to etHolder AS you have done
    RelativeLayout rl2 = addEditText(etHolder, null, 1);
    RelativeLayout rl3 = addEditText(etHolder, rl2, 2);
    RelativeLayout rl4 = addEditText(etHolder, rl3, 3);
    RelativeLayout rl5 = addEditText(etHolder, rl4, 4);
    RelativeLayout rl6 = addEditText(etHolder, rl5, 5);
    RelativeLayout rl7 = addEditText(etHolder, rl6, 6);
    RelativeLayout rl8 = addEditText(etHolder, rl7, 7);
    RelativeLayout rl9 = addEditText(etHolder, rl8, 8);
    RelativeLayout rl10 = addEditText(etHolder, rl9, 9);
    RelativeLayout rl11 = addEditText(etHolder, rl10, 10);
    RelativeLayout rl12 = addEditText(etHolder, rl11, 11);
    RelativeLayout rl13 = addEditText(etHolder, rl12, 12);

    scroll.addView(etHolder); // adding RelativeLayout = etHolder to ScrollView = scroll

    scrollHolder.addView(scroll); // adding ScrollView = scroll to RelativeLayout = scrollHolder

    setContentView(scrollHolder);

}

// Method as you have done
private RelativeLayout addEditText(RelativeLayout objRLContent,
        RelativeLayout layoutAbove, int i) {

    RelativeLayout objRLEditText = new RelativeLayout(this);
    objRLEditText.setId(1100 + i);
    RelativeLayout.LayoutParams objRLEditTextParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    if (layoutAbove != null)
        objRLEditTextParams.addRule(RelativeLayout.BELOW,
                layoutAbove.getId());
    objRLEditText.setLayoutParams(objRLEditTextParams);
    objRLEditText.setPadding(8, 2, 8, 2);

    Button objBtn = new Button(this);
    objBtn.setId(1300 + i);
    RelativeLayout.LayoutParams objETDataParams = new RelativeLayout.LayoutParams(
            200, LayoutParams.WRAP_CONTENT);
    objBtn.setLayoutParams(objETDataParams);
    objBtn.setPadding(8, 0, 8, 0);
    objBtn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    objBtn.setText("" + i);
    objBtn.setSingleLine(true);
    objRLEditText.addView(objBtn);
    objRLContent.addView(objRLEditText);

    return objRLEditText;

}
}

您可以使用表格布局或网格布局

    TableLayout table = (TableLayout)findViewById(R.id.the_table);

    for(int j=0;j<3;j++){
         TableRow row = new TableRow(this);

         for (int i=0; i<4;i++){
              final Button Button = new Button(this);
              Button.setTag(row.getTag());
              Button.setText("x");
              Button.setWidth(30);
              Button.setHeight(10);
              row_UE.addView(Button);
         }
    }
TableLayout table=(TableLayout)findViewById(R.id.the_table);

对于(int j=0;j,可以使用表格布局或网格布局

    TableLayout table = (TableLayout)findViewById(R.id.the_table);

    for(int j=0;j<3;j++){
         TableRow row = new TableRow(this);

         for (int i=0; i<4;i++){
              final Button Button = new Button(this);
              Button.setTag(row.getTag());
              Button.setText("x");
              Button.setWidth(30);
              Button.setHeight(10);
              row_UE.addView(Button);
         }
    }
TableLayout table=(TableLayout)findViewById(R.id.the_table);

对于(int j=0;ju为什么不使用自定义列表视图?我认为这比尝试使用24个按钮要好!24个项目的事件侦听器可能比1个列表事件侦听器慢吗?使用网格布局而不是线性布局…@tuğrul büyükık我认为这不会是一个问题为什么不使用自定义列表视图呢?我认为这会是一个问题比尝试使用24个按钮要好!24个项目的事件监听器可能比单列表事件监听器慢吗?使用网格布局而不是线性布局…@tuğrul büyükık我认为这不会是一个问题谢谢。这正是我的意思。谢谢。这正是我的意思。