2016-02-29 1 views
0

Bonjour, j'essaie d'ajouter TextView avec drawableLeft à GridLayout. J'ajoute ce TextView dans une boucle. Les TextView sont ajoutés correctement, mais ils ne sont pas alignés correctement. Chaque textview devrait prendre la même largeur dans une rangée horizontale qui ne se produit pas.Ajout par programme de TextView à l'alignement de mise en grille incorrect

Voici le code que je utilise

GridLayout gridLayout = new GridLayout(getContext()); 
      gridLayout.setAlignmentMode(GridLayout.ALIGN_BOUNDS); 
      gridLayout.setColumnCount(2); 
      gridLayout.setRowCount(3); 
      TextView titleText; 
      for (int i = 0; facilities != null && i < facilities.size(); i++) { 
       titleText = new TextView(getContext()); 
       titleText.setText(facilities.get(i)); 
       gridLayout.addView(titleText, i); 
       titleText.setCompoundDrawablesWithIntrinsicBounds(rightIc, 0, 0, 0); 
} 

Répondre

1

Pour cela, vous devez définir dynamiquement la largeur de colonne pour les vues. Cela va finalement aligner chaque vue correctement avec une quantité égale d'espace.

GridLayout gridLayout = new GridLayout(getContext()); 
      gridLayout.setAlignmentMode(GridLayout.ALIGN_BOUNDS); 
      gridLayout.setColumnCount(2); 
      gridLayout.setRowCount(3); 
      TextView titleText; 
      for (int i = 0; facilities != null && i < facilities.size(); i++) { 
       titleText = new TextView(getContext()); 
       titleText.setText(facilities.get(i)); 
       gridLayout.addView(titleText, i); 
       titleText.setCompoundDrawablesWithIntrinsicBounds(rightIc, 0, 0, 0); 
       GridLayout.LayoutParams param =new GridLayout.LayoutParams(); 
       param.height = LayoutParams.WRAP_CONTENT; 
       param.width = LayoutParams.WRAP_CONTENT; 
       param.rightMargin = 5; 
       param.topMargin = 5; 
       param.setGravity(Gravity.CENTER); 
       param.columnSpec = GridLayout.spec(c); 
       param.rowSpec = GridLayout.spec(r); 
       titleText.setLayoutParams (param); 

} 
+7

ce qui est c et r ici? – sector11

+0

c est l'index de colonne et r est l'index de ligne de GridLayout –

0

C'est peut-être à cause de la longueur de votre texte dynamique n'est pas fixé de sorte que chaque textview ne pas prendre même espace Check this

int height=getContext().getResources().getDimension(R.dimen.activity_horizontal_margin); //set size of dimen in required resolution 

titletext .setLayoutParams (nouveaux LinearLayout.LayoutParams (0, hauteur, hauteur)) ;

+0

le texte peut être au plus 15 char max – sector11

+0

Vous pouvez définir la largeur min pour textview, ou fixer la largeur de textview est le moyen le plus facile si vous avez juste 15char longueur dans textview –

2

Fondamentalement, c'est le nombre de colonnes et de lignes. J'ai re-wrotten la logique complète

GridLayout gridLayout = new GridLayout(getContext()); 
    int total = facilities.size(); 
    int column = 2; 
    int row = total/column; 
    gridLayout.setAlignmentMode(GridLayout.ALIGN_BOUNDS); 
    gridLayout.setColumnCount(column); 
    gridLayout.setRowCount(row + 1); 
    TextView titleText; 
    for(int i =0, c = 0, r = 0; i < total; i++, c++) 
    { 
     if(c == column) 
     { 
      c = 0; 
      r++; 
     } 
     titleText = new TextView(getContext()); 
     titleText.setText(facilities.get(i)); 
     gridLayout.addView(titleText, i); 
     titleText.setCompoundDrawablesWithIntrinsicBounds(rightIc, 0, 0, 0); 
     GridLayout.LayoutParams param =new GridLayout.LayoutParams(); 
     param.height = LayoutParams.WRAP_CONTENT; 
     param.width = LayoutParams.WRAP_CONTENT; 
     param.rightMargin = 5; 
     param.topMargin = 5; 
     param.setGravity(Gravity.CENTER); 
     param.columnSpec = GridLayout.spec(c); 
     param.rowSpec = GridLayout.spec(r); 
     titleText.setLayoutParams (param); 
    } 
+0

hélas didn Ne travaille pas pour moi: '(essayera avec la disposition linéaire avec le poids maintenant ... – sector11