2016-02-29 124 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

相關問題