2013-10-03 106 views
0

我已經看遍了所有的地方,這個網站上有很多類似的問題,但我還沒有找到一個可行的,我想知道我做錯了什麼。我有一個EditText,我必須以編程方式添加它,它通常只有一行文本,但如果文本長度超過視圖寬度,我需要它來包裝。android EditText不會自動換行文本

我使用的唯一XML是表格的佈局編輯文本最終加入到

<TableLayout 
android:id="@+id/LineItemLayout" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginBottom="25dp" 
android:stretchColumns="4" 
> 

</TableLayout> 

編輯文本是一個在第4列,但即使我刪除了stretchColumns屬性仍然WASN沒有工作。 (我想也許拉伸列搞亂了寬度,它不能計算何時包裝)

這裏是代碼,得到循環遍歷我添加到表中的每一行,p是EditText我不能正常工作。只是一點解釋,行包含一個數字的EditText(這一個很好,我不希望它多行),然後兩個Button和一個TextView,然後最後一個項目是EditText,其餘的寬度並應該包裝文字。我把它們都放在這裏,以防他們造成問題,因爲此時我不知道下一步該怎麼做。

final TableRow l = new TableRow(EnvelopeModify.this); 

TextView t = new TextView(EnvelopeModify.this); 

t.setText("$" + lineItems.get(x).getTotal() + ", " + lineItems.get(x).getQuantity() + " " + lineItems.get(x).getItemUnits() + ""); 
t.setPadding(5, 5, 30, 5); 

EditText p = new EditText(EnvelopeModify.this); 
p.setText(lineItems.get(x).getProposalDesc()); 
p.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_MULTI_LINE); 
p.setBackgroundResource(R.color.blueEditText); 
p.setMinLines(1); 
p.setHorizontallyScrolling(false); 
p.setImeOptions(EditorInfo.IME_ACTION_DONE); 
//TableLayout.LayoutParams tempParams = new TableLayout.LayoutParams(0,LayoutParams.WRAP_CONTENT,1f); 
//p.setLayoutParams(tempParams); 

EditText o = new EditText(EnvelopeModify.this); 
o.setText(lineItems.get(x)._order); 
o.setWidth(50); 
o.setInputType(InputType.TYPE_CLASS_NUMBER); 

Button d = new Button(EnvelopeModify.this); 
d.setText("Remove"); 
Button e = new Button(EnvelopeModify.this); 
e.setText("Edit"); 

l.addView(o); 
l.addView(d); 
l.addView(e); 
l.addView(t); 
l.addView(p); 
lineItemLayouts.add(l); // this is the tableLayout in the xml above 

據推測setHorizo​​ntallyScrolling(false)將允許包裝,但添加,只是使事情變得更糟。不僅文本不能打包,而且應該包裝的文本不可見,因爲edittext僅顯示文本的第一部分(不滾動)。我仍然可以按回車,並按預期創建一個新行,但我無法獲取任何文本。

回答

2

的問題是與TableLayout的是的EditText在EditText是在可伸縮列,設置列也收縮固定的問題。這是我對xml佈局所做的更改。

<TableLayout 
    android:id="@+id/LineItemLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="25dp" 
    android:stretchColumns="4" 
    android:shrinkColumns="4" 
    > 

這裏是我在編碼一側結束了對我的工作:

EditText p = new EditText(EnvelopeModify.this); 
p.setText(lineItems.get(x).getProposalDesc()); 
p.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); 
p.setBackgroundResource(R.color.usedOnProposal); 
p.setMinLines(1); 
+0

當我添加android:shrinkColumns時,問題得到解決 – Plugie

0

你在這個line.-

p.setHorizontallyScrolling(false); 

對於多問題,禁用水平滾動,你可以try.-

p.setSingleLine(false); 
p.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); 
+0

這也不工作,是否有事情我必須擺脫?我知道p.setHorizo​​ntallyScrolling(false)停止了滾動,但是從我在其他地方讀到的內容來看,它應該強制它也包裝。我剛剛擺脫它,文本不滾動,這是奇怪的,因爲它是在我添加它之前。 – JStephen

+0

mmh真的很奇怪。你能嘗試將layout_width設置爲match_parent嗎? – ssantos

+0

如果我將EditText寬度設置爲match_parent,它不會顯示在屏幕上。我使用上面註釋過的代碼,並嘗試使用TableLayout.LayoutParams和ViewGroup.LayoutParams(表格佈局是我之前使用的,因爲我想設置權重)。 – JStephen