2016-06-30 7 views
1

.xmlファイルで定義されたテーブルがありますが、行とヘッダーを動的に追加する必要があります。私は横と縦の向きでテーブルの行を塗りつぶしに問題があります。私はstretchColumnsパラメータを試しましたが、それは助けにはなりませんでした。それを行う最善の方法は何ですか?AndroidでTableRowの幅をmaxに設定する方法は?

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

     TableRow headerRow = new TableRow(this); 

     JSONObject obj; 

     obj = new JSONObject(loadJSONFromAsset()); 

     JSONArray records = obj.getJSONArray("tests"); 

     ArrayList<String> headers = new ArrayList<>(); 
     headers.add("Header 1"); 
     headers.add("Header 2"); 
     headers.add("Header 3"); 
     headers.add("Header 4"); 
     headers.add("Header 5"); 

     for(int i = 0; i < headers.size(); i++) { 
      TextView header = new TextView(this); 
      header.setText(headers.get(i)); 
      header.setTextColor(Color.WHITE); 
      header.setBackgroundColor(Color.rgb(24, 116, 205)); 
      header.setPadding(15, 15, 15, 15); 
      header.setTextSize(20); 
      header.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 

      header.setMaxLines(1); 
      headerRow.addView(header); 

     } 

     table.addView(headerRow); 

とxml

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content"> 


<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <HorizontalScrollView 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent"> 

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

      </TableLayout> 
     </HorizontalScrollView> 
    </ScrollView> 

</LinearLayout> 

</GridLayout> 
+0

テーブルがスクロールビュー内にあるため、幅と高さの制限はありません。したがって、* max *幅である決定する方法はありません。あなたは手動で設定することができます –

+0

@VladMatvienkoどのようにスクロールビューなしでそれを行うには? – Sheppard25

+0

私はあなたがscrollViewなしでそれをする必要があると言っていませんでした。あなたはあなたのために* max *の幅を決める必要があります。 100dpのような正確な値ですか、それとも画面の幅ですか、それとも何ですか? –

答えて

0

この方法を試してみてください。以下は、TableRowが利用可能な全幅に揃っていることを確認します。基本コンポーネントの後

、XMLであなたのTableLayoutを置く:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/mainLL" 
    android:orientation="vertical"> 
<TableLayout 
      android:id="@+id/tableLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 

今すぐあなたのロジックでは、あなたは応答からのアイテムの数に応じて追加することができます。これはforループ内になければなりません。

for(int i = 0; i < leftComponent.size(); i++) 
    { 
      //Table Layout parameters 
      TableRow.LayoutParams textViewParam = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,1.0f); 
      TableLayout tableLayout = (TableLayout) view.findViewById(R.id.fenceTableLayout); 
      TableRow trHead = new TableRow(context); 
      LayoutParams tableRowParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
      trHead.setLayoutParams(tableRowParams); 

      TextView nameHead = new TextView(context); 
      nameHead.setText(leftComponent[i]); 
      nameHead.setLayoutParams(textViewParam); 
      nameHead.setGravity(Gravity.CENTER); 
      trHead.addView(nameHead); 

      TextView detailHead = new TextView(context); 
      detailHead.setText(rightComponent[i]); 
      detailHead.setGravity(Gravity.CENTER); 
      detailHead.setLayoutParams(textViewParam); 

      trHead.addView(detailHead); 
      tableLayout.addView(trHead); 

    } 

必要に応じてカスタマイズする必要があります。

関連する問題