2013-03-08 61 views
0

好吧我今晚已经在互联网上搜索了很多,这就是我想到的。由于某种原因,它不起作用。我没有得到任何错误,我可以验证我的循环实际上正在运行。这是我的代码。Android声明按钮Programmaticaly

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); 
     } 
    } 

我知道代码正在运行,因为它输出的数字更改为logcat。我可以弄清楚的是,它一直给我一个空白的屏幕,只有我的背景显示。按钮不显示。

另外My Imports如下。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import com.<MYAPP>.SoundBoard; 
import com.<MYAPP>.R; 
import android.content.ContentValues; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.provider.MediaStore.Audio.AudioColumns; 
import android.util.Log; 
import android.util.TypedValue; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnLongClickListener; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.widget.TableLayout; 
import android.widget.TableRow; 
import android.widget.Toast; 
import com.google.ads.AdRequest; 
import com.google.ads.AdSize; 
import com.google.ads.AdView; 
import android.widget.TableRow.LayoutParams; 

我宣布buttonparams在我的课的开头:

private TableLayout.LayoutParams buttonparams = new TableLayout.LayoutParams(); 
+1

布局PARAMS你用于tablerow的应该是TableRow.LayoutParams的,检查进口,并且还为TableLayout也 – Pragnani 2013-03-08 09:46:51

+0

虐待更新我的问题与进口。我已经有这个顺便说一句。 – mpeerman 2013-03-08 09:47:20

+0

我不知道,但采取泛型类型View.LayoutParams而不是特定的,即TableRow.LayoutParams,因为你已经使用了按钮的布局参数 – Pragnani 2013-03-08 09:53:00

回答

1

布局PARAMS你已经使用了的TableRow应该TableRow.LayoutParams的, 尝试

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

你可以用这个例子作为参考。

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); 

      } 
+0

我没有看到与我之间的任何区别使用表布局和行和按钮 – mpeerman 2013-03-08 09:50:56

+0

严重! @ mpeerman说,他搜查了整晚,你只是向他的方向投入一些代码,希望获得一些声望点。人。 – 2013-03-08 09:54:27

+0

我的想法不是关于声望点,而是给出一个简单的工作示例。我知道他搜索整夜,但一个简单的例子可能会帮助他或其他人。 – 2013-03-08 09:59:02

0

通过像buttonParams =新的LayoutParams(高度,宽度),而不是通过设定buttonParams.height =高度等构造设置按钮PARAMS。区别在于赋值不会调用invalidate,因此dimen将为零。

+0

虐待发布代码,我已经宣布了按钮参数 – mpeerman 2013-03-08 09:57:17