2013-07-22 117 views
0

當我將一個textView添加到tableLayout中的一行中時,它會調整它之前的所有長度,如果長度更長。我要的是,對於每一個TextView的被包裹到文本的長度。該圖片將更好地解釋textView調整爲tableLayout中最長的TextView

 TableLayout ll = (TableLayout) findViewById(R.id.messhistory); 
     TextView edit = new TextView(this); 
     TableRow row = new TableRow(this); 
     //edit.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     edit.setBackgroundDrawable(getResources().getDrawable(R.drawable.border)); 
     if(true) 
     { 
      ImageView iv= new ImageView(this); 
      row.addView(iv); 
      iv.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher)); 
     } 
     row.addView(edit,new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT)); 
     ll.addView(row); 

添加一個較長的文本

enter image description here

加入過了好久之前文字

enter image description here

+0

'if(true){...;}'? :d –

回答

1

您在任何地方都使用edit的相同實例,因此下次您將文本放大時,它將包裝較大的文本,因此也會使其以前的實例更大。 一個可能的解決方案是每次添加文本時創建一個新的編輯實例。

1

通過上TableLayout的文檔閱讀,我來acrross此:

列的寬度是由具有最寬單元格的行中 列定義。但是,TableLayout可以通過調用setColumnShrinkable()或 setColumnStretchable()將某些列指定爲可縮小或可伸縮的列。如果標記爲可收縮,則列寬可以收縮以使表適合其父對象。如果標記爲 可伸縮,它可以擴大寬度以適應任何額外的空間。

所以,你都注意到的現象是由設計。但要獲得類似的效果(沒有固定的寬度),可以嘗試下面的代碼:

// Define a Linearlayout instead of a TableLayout in your layout file 
// Set its width to match_parent 
// Set its orientation to "vertical" 
LinearLayout ll = (LinearLayout) findViewById(R.id.someLinearLayout); 

// This serves the same purpose as the TableRow 
LinearLayout llRow = new LinearLayout(this); 

TextView edit = new TextView(this); 

edit.setBackgroundDrawable(getResources().getDrawable(R.drawable.border)); 

ImageView iv= new ImageView(this); 

llRow.addView(iv); 

iv.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher)); 

LinearLayout.LayoutParams llLeft = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 

LinearLayout.LayoutParams llRight = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 

llLeft.gravity = Gravity.LEFT; 

llRight.gravity = Gravity.RIGHT; 

// You can set the LayoutParams llLeft(messages appear on left) or 
// llRight(messages appear on right) Add "edit" first to make the imageview appear on right 

llRow.addView(edit, llLeft); 

ll.addView(llRow);