Android以编程方式声明按钮

Android以编程方式声明按钮,android,android-layout,android-widget,Android,Android Layout,Android Widget,今晚我在互联网上做了大量的搜索,这就是我想到的。由于某种原因,它不起作用。我没有收到任何错误,我可以验证我的循环是否实际运行。这是我的密码 TableLayout table = (TableLayout) findViewById(R.id.tablelayout1); while (numsounds>0){ Log.d("MYTAG", ""+numsounds); if(numsounds>=3){ Log.d

今晚我在互联网上做了大量的搜索,这就是我想到的。由于某种原因,它不起作用。我没有收到任何错误,我可以验证我的循环是否实际运行。这是我的密码

TableLayout table = (TableLayout) findViewById(R.id.tablelayout1);
    while (numsounds>0){
        Log.d("MYTAG", ""+numsounds);

        if(numsounds>=3){
            Log.d("MYTAG", ""+numsounds);
            TableRow row = new TableRow(this);
            for (int j = 0; j < 3; j++) {


            int button_num = j + 1 + ( row_num * 3);
            row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
            buttonparams.height = LayoutParams.MATCH_PARENT;
            int btnwidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
            buttonparams.width = btnwidth;
            buttonparams.weight = .31f;
            Button btn = new Button(this);
            btn.setLongClickable(true);
            btn.setLayoutParams(buttonparams);
            btn.setText(soundtitleArray[button_num]);
            btn.setId(j + 1 + ( button_num));
            btn.getBackground().setAlpha(150);
            btn.setOnClickListener(buttonClickListener);
            btn.setOnLongClickListener(buttonLongClickListener);
            row.addView(btn);

            }
            numsounds=numsounds-3;
            Log.d("MYTAG", ""+numsounds);
            table.addView(row);
            row_num = row_num+1;
        }
        if(numsounds<3){
            Log.d("MYTAG", ""+numsounds);
            TableRow row = new TableRow(this);
            for (int j = 0; j < numsounds; j++) {


                int button_num = j + 1 + ( row_num * numsounds);
                row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
                buttonparams.height = LayoutParams.MATCH_PARENT;
                int btnwidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
                buttonparams.width = btnwidth;
                float btnweight = 1/numsounds;
                buttonparams.weight = btnweight;
                Button btn = new Button(this);
                btn.setLongClickable(true);
                btn.setLayoutParams(buttonparams);
                btn.setText(soundtitleArray[button_num]);
                btn.setId(j + 1 + ( button_num));
                btn.getBackground().setAlpha(150);
                btn.setOnClickListener(buttonClickListener);
                btn.setOnLongClickListener(buttonLongClickListener);
                row.addView(btn);

                }
                table.addView(row);
                row_num = row_num+1;
                numsounds=numsounds-1;
                Log.d("MYTAG", ""+numsounds);
        }
    }

您可以使用此示例作为参考

LinearLayout imageslayout = (LinearLayout)findViewById(R.id.imageslayout);

for (int i = 0; i < 10; i++) {
                Button im = new Button(getApplicationContext());

                TableRow.LayoutParams blp = new TableRow.LayoutParams();
                blp.rightMargin = 20;
                blp.width=170;
                blp.height=140;  
                im.setLayoutParams(blp); 


                imageslayout.addView(im); 
                im.setOnClickListener(this);

            }
LinearLayout imageslayout=(LinearLayout)findViewById(R.id.imageslayout);
对于(int i=0;i<10;i++){
Button im=新建按钮(getApplicationContext());
TableRow.LayoutParams blp=新建TableRow.LayoutParams();
blp.rightMargin=20;
blp.宽度=170;
blp.高度=140;
im.setLayoutParams(blp);
imageslayout.addView(im);
im.setOnClickListener(this);
}

通过构造函数设置按钮参数,如ButtonParms=新布局参数(高度、宽度),而不是通过ButtonParms.height=高度等进行设置。不同之处在于赋值不调用invalidate,因此dimen将为零。

用于TableRow的布局参数应为TableRow.LayoutParams, 试一试


用于tablerow的布局参数应为tablerow.LayoutParams,请检查导入,对于TableLayout AlSoil,请使用导入更新我的问题。顺便说一句,我已经有了。我不确定,但采用通用类型View.LayoutParams而不是特定类型,即TableRow.LayoutParams,因为您也使用了按钮的布局参数。我现在就试试看,
btnwidth
的值如何,您检查过了吗?只是为了确保它不是0左右我看不出这和我的有什么区别,除了我使用的是表格布局、行和按钮@mpeerman说他整晚都在搜索,而你只是向他扔了一些代码,希望得到一些声望点。伙计。我的想法不是关于声誉点,而是给出一个简单的工作示例。我知道他搜索了一整晚,但一个简单的示例也可能对他或其他人有所帮助。
private TableLayout.LayoutParams buttonparams = new TableLayout.LayoutParams();
LinearLayout imageslayout = (LinearLayout)findViewById(R.id.imageslayout);

for (int i = 0; i < 10; i++) {
                Button im = new Button(getApplicationContext());

                TableRow.LayoutParams blp = new TableRow.LayoutParams();
                blp.rightMargin = 20;
                blp.width=170;
                blp.height=140;  
                im.setLayoutParams(blp); 


                imageslayout.addView(im); 
                im.setOnClickListener(this);

            }
TableRow.LayoutParams buttonparams = new TableRow.LayoutParams();