2016-02-29 75 views
0

嗨,我想添加TextView与drawableLeft到GridLayout。 我在Loop中添加了这个TextView。 TextView得到正确添加,但没有正确对齐。每个文本视图在一个水平行中的宽度应该不相等。以编程方式将TextView添加到网格布局对齐不正确

以下是我使用

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

回答

1

代码对于这一点,你必须动态地设置列宽的意见。这将最终将每个视图正确对齐相同的空间量。

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

什么是c和r在这里? – sector11

+0

c是列索引,r是GridLayout的行索引 –

0

这可能是因为您的动态文本的长度是不固定的所以每次的TextView不采取同一空间Check this

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

titleText .setLayoutParams(新LinearLayout.LayoutParams(0,身高,身高)) ;

+0

文本最多可以有15个字符 – sector11

+0

您可以设置文本视图的最小宽度,或者修复textview宽度是最简单的方法,如果您在文本视图中只有15char长度 –

2

基本上就是列和行数。我重申了完整的逻辑

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

alas didn '为我工作:'(现在尝试线性布局与重量... – sector11

相关问题