2017-08-15 2 views
0

J'ai créé un TableLayout dynamique dans Android. Le problème est, il y a un vide inutile dans la colonne. Je voudrais l'enlever, j'ai changé le code plusieurs fois mais les résultats sont étonnants. Voici le meilleur que je peux obtenir en ce moment.Redimensionner dynamique TableLayout dans android

TableLayout Image

Comme vous pouvez le voir, il y a une lacune dans l'en-tête et aussi dans la ligne si la ligne se composant 2 + lignes. Je souhaite que la première colonne (Items) ait la plus longue largeur tandis que l'autre colonne enveloppe simplement le contenu avec l'en-tête.

ici est le XML

<TableLayout 
        android:id="@+id/tableDescription" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:stretchColumns="*"> 

        <TableRow 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:weightSum="4"> 

         <TextView 
          android:layout_width="@dimen/size0" 
          android:layout_height="match_parent" 
          android:layout_weight="1" 
          android:background="@drawable/cell_shape" 
          android:padding="@dimen/size5" 
          android:text="@string/items" /> 

         <TextView 
          android:layout_width="@dimen/size0" 
          android:layout_height="match_parent" 
          android:layout_weight="1" 
          android:background="@drawable/cell_shape" 
          android:padding="@dimen/size5" 
          android:text="@string/quantity" /> 

         <TextView 
          android:layout_width="@dimen/size0" 
          android:layout_height="match_parent" 
          android:layout_weight="1" 
          android:background="@drawable/cell_shape" 
          android:padding="@dimen/size5" 
          android:text="@string/unitPrice" /> 

         <TextView 
          android:layout_width="@dimen/size0" 
          android:layout_height="match_parent" 
          android:layout_weight="1" 
          android:background="@drawable/cell_shape" 
          android:padding="@dimen/size5" 
          android:text="@string/total" /> 
        </TableRow> 

       </TableLayout> 

Et voici le code pour rendre la ligne dynamique

private void init() { 

    // Array for item 
    String[] valuesItem = new String[] { 
      "Room asd", 
      "Room qwewq", 
      "Room kadskadskl", 
      "Room oeqwoeqwo", 
      "Room uuawuwauaw" }; 

    final ArrayList<String> listItem = new ArrayList<String>(); 
    for (int i = 0; i < valuesItem.length; ++i) { 
     listItem.add(valuesItem[i]); 
    } 

    // Array for quantity 
    String[] valuesQuantity = new String[] { 
      "1", 
      "1", 
      "2", 
      "1", 
      "2" }; 

    final ArrayList<String> listQuantity = new ArrayList<String>(); 
    for (int i = 0; i < valuesQuantity.length; ++i) { 
     listQuantity.add(valuesQuantity[i]); 
    } 

    // Array for price 
    String[] valuesPrice = new String[] { 
      "10", 
      "10", 
      "20", 
      "50", 
      "30" }; 

    final ArrayList<String> listPrice = new ArrayList<String>(); 
    for (int i = 0; i < valuesPrice.length; ++i) { 
     listPrice.add(valuesPrice[i]); 
    } 

    // Array for total 
    String[] valuesTotal = new String[] { 
      "10", 
      "10", 
      "40", 
      "50", 
      "60" }; 

    final ArrayList<String> listTotal = new ArrayList<String>(); 
    for (int i = 0; i < valuesTotal.length; ++i) { 
     listTotal.add(valuesTotal[i]); 
    } 

    for (int i = 0; i <valuesItem.length; i++) { 

     TableRow row= new TableRow(getActivity()); 
     TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT); 
     row.setLayoutParams(lp); 
     TextView item = new TextView(getActivity()); 
     TextView quantity = new TextView(getActivity()); 
     TextView price = new TextView(getActivity()); 
     TextView total = new TextView(getActivity()); 
     item.setText(valuesItem[i]); 
     quantity.setText(valuesQuantity[i]); 
     price.setText(valuesPrice[i]); 
     total.setText(valuesTotal[i]); 
     item.setPadding(getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       (getActivity().getResources().getDimensionPixelSize(R.dimen.size5)), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5)); 
     quantity.setPadding(getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5)); 
     price.setPadding(getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5)); 
     total.setPadding(getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5), 
       getActivity().getResources().getDimensionPixelSize(R.dimen.size5)); 
     item.setWidth(getActivity().getResources().getDimensionPixelSize(R.dimen.size0)); 
     quantity.setWidth(getActivity().getResources().getDimensionPixelSize(R.dimen.size0)); 
     price.setWidth(getActivity().getResources().getDimensionPixelSize(R.dimen.size0)); 
     total.setWidth(getActivity().getResources().getDimensionPixelSize(R.dimen.size0)); 
     item.setBackgroundResource(R.drawable.cell_shape); 
     quantity.setBackgroundResource(R.drawable.cell_shape); 
     price.setBackgroundResource(R.drawable.cell_shape); 
     total.setBackgroundResource(R.drawable.cell_shape); 
     row.addView(item); 
     row.addView(quantity); 
     row.addView(price); 
     row.addView(total); 
     tableDynamic.addView(row); 
    } 

} 

Désolé si c'est un peu en désordre. Merci!

Répondre

0

Résolu en configurant LayoutParams pour chaque TextView

lp = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT, 5f); 
     item.setLayoutParams(lp); 
     lp = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT, 2f); 
     quantity.setLayoutParams(lp); 
     lp = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT, 1.5f); 
     price.setLayoutParams(lp); 
     lp = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT, 1.5f); 
     total.setLayoutParams(lp);