2016-05-15 2 views
0

を埋めるためにボタンを追加は、私はprogramaticaly画像以下のようなのTableRowを追加しても、その中のいくつかのボタンができ、プログラムでのTableRowと画面

enter image description here

、ここでは私のコードです:

<TableLayout 
    android:id="@+id/Tb1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TableRow 
     android:id="@+id/r1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></TableRow> 

    <TableRow 
     android:id="@+id/r2" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></TableRow> 

    <TableRow 
     android:id="@+id/r3" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></TableRow> 

</TableLayout> 

と:

Button btn1; 
private TableLayout buttonTableLayout; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btn1 = (Button) findViewById(R.id.btn1); 
    buttonTableLayout = (TableLayout) findViewById(R.id.Tb1); 

    btn1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      for (int row = 0; row < buttonTableLayout.getChildCount(); ++row) 
       ((TableRow) buttonTableLayout.getChildAt(row)).removeAllViews(); 

      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      for (int row = 0; row < 3; row++) { 
       TableRow currentTableRow = getTableRow(row); 

       for (int column = 0; column < 5; column++) { 
        Button newGuessButton = (Button) inflater.inflate(R.layout.my_button, null); 
        String myName = new String(String.valueOf((row * 5) + column + 1)); 
        newGuessButton.setText(myName); 

        currentTableRow.addView(newGuessButton); 
       } 
      } 
     } 
    }); 
} 

private TableRow getTableRow(int row) { 
    return (TableRow) buttonTableLayout.getChildAt(row); 
} 

とxml(my_buttonという):

<Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/newButton" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content"></Button> 

私にそれを解決するためにいくつかのアドバイスをお願いします。

答えて

1

Android TableRowクラスは実際にLinearLayoutクラスに拡張されていますので、LinearLayoutのすべての機能を使用できます。

android:layout_weightを使用すると、これらのボタンを均等に伸ばすことができます。これらのボタンを追加する場所には、次のコードを追加するだけです。

LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT); 
p.weight = 1; 
button.setLayoutParams(p); 

または代わりに、あなたのbutton.xmlレイアウトファイルに以下の行を追加します。

android:layout_width="0dp" 
android:layout_weight="1" 

Docsは言う:

等しく重み付け子供

各子供が画面上で同じ量のスペースを使用する線形レイアウトを作成するには、各ビューのを"0dp"(縦レイアウトの場合)またはandroid:layout_width"0dp"(横レイアウトの場合)に設定します。次に、各ビューのandroid:layout_weight"1"に設定します。

+0

あなたは私が私のbutton.xmlに最後の2行を追加しますが、それはない作品を行います。@これらのボタンを膨張のあなたの方法は、いくつかの変更を必要とするためこんにちは、私はFrogatto – Beppe

+1

@Beppeだご覧のよう!親として 'null'を渡すべきではありません。これを試してください: 'inflater.inflate(R.layout.my_button、currentTableRow、false);' –

+0

はい、うまくいきます。あなたは華麗です。ありがとう。 – Beppe

関連する問題