2011-07-13 51 views
112

我不喜歡在下面xmlAndroid中的Multiline TextView?

<TableRow> 
    <TextView android:id="@+id/address1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:maxLines="4" 
     android:singleLine="false"    
     android:text="Johar Mor, Gulistan-e-Johar, Karachi" > 
    </TextView> 
</TableRow> 

它不工作multiline,和我使用TableLayout ...

那麼,什麼是錯誤的,我在這裏做什麼?

回答

156

如果您放入TextView的文本很短,它不會自動擴展爲四行。如果你想TextView總是不管有沒有在它的文本長度的四條線,設置android:lines屬性:

<TextView 
    android:id="@+id/address1" 
    android:gravity="left" 
    android:layout_height="fill_parent" 
    android:layout_width="wrap_content" 
    android:maxLines="4" 
    android:lines="4" 
    android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView> 
+14

OP **沒有**「希望TextView始終有四行,而不管其中的文本長度如何」。 – tar

+5

這個答案適合我。但是我得到了最好的結果,而不是maxlines和lines,但是maxlines和minlines並沒有使用線條。我將minlines設置爲1,maxlines大於最大的數據。這樣我得到1到N行的數據的緊湊視圖。 –

+1

@RearleHarris:我也嘗試過相同的解決方案,但問題是沒有采取maxLines計數。所有數據都以minLines計數顯示。我現在可以嘗試什麼我在xml中使用自定義textview –

-19

當它不會獲得足夠的空間以適合單行並且singLine未設置爲true時,TextView將爲多行。

如果它在一行中獲得空間,它不會是多行。

+7

如果我想使用fill_parent而不是固定寬度怎麼辦?如果我這樣做的話,我的內容會被剪切掉。 – happyhardik

+5

我會嘗試'android:singleLine =「false」'或'android:inputType =「textMultiLine」'(如Marageus所述)。注意'android:inputType =當兩者都存在時,「textMultiLine」優先 –

+4

這是如何被接受的答案? – Chaoz

5

我不喜歡,它強制文本視圖行數的解決方案。我寧願建議你通過解決方案proposed here解決它。正如我所看到的,OP也在努力使文本視圖看起來像表格中的正確,並且shrinkColumns是通過實現想要的正確指示。

27

我不喜歡這些答案。只需設定的inputType和TextView的將適應其內容

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:inputType="textMultiLine"/> 

測試上的Nexus One(2.3)和Nexus 4(4.4)

+33

android:inputType =「textMultiLine」不適用於TextView,它適用於EditText,如果您嘗試這樣做會得到警告 – oat

+2

您應該聽取警告。使用@Ryans解決方案。 – m02ph3u5

8

只需滾動型中添加的TextView

<ScrollView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:layout_marginLeft="15dp" 
      android:layout_marginRight="15dp" 
      android:layout_marginTop="20dp" 
      android:fillViewport="true"> 

      <TextView 
       android:id="@+id/txtquestion" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent" 
       android:background="@drawable/abs__dialog_full_holo_light" 
       android:lines="20" 
       android:scrollHorizontally="false" 
       android:scrollbars="vertical" 
       android:textSize="15sp" /> 

     </ScrollView> 
1

我使用:

TableLayout tablelayout = (TableLayout) view.findViewById(R.id.table); 
tablelayout.setColumnShrinkable(1,true); 

它爲我工作。 1是列數。

83

我試着評論上面的答案之一,但我沒有足夠的聲望。
我想我要補充一點,如果你使用:

android:inputType="textMultiLine"

然後在視圖不再是點擊。我試圖在我的幻燈片菜單中獲得多行文字瀏覽,這顯然需要響應點擊。

android:singleLine="false"工作得很好。

+1

這並不完全正確,因爲Android自己的lint錯誤提示您只在EditText而不是TextView中使用此屬性。 – Jared

+0

您是指textMultiline?我說*不*使用。 singleLine在TextViews上很好:http://developer.android.com/reference/android/widget/TextView.html#attr_android:singleLine – Ryan

+2

android:singleLine現在不推薦使用 –

5

簡單地說「\ n」你的文字裏......沒有額外的屬性需要:)

  <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Pigeon\nControl\nServices" 
      android:id="@+id/textView5" 
      android:layout_gravity="center" 
      android:paddingLeft="12dp"/> 
+3

這個解決方案不能用於動態設置文本 –

+0

@SagarDevanga這是什麼意思動態設置文本? – juil

+1

@SagarDevanga,我剛剛檢查過,默認情況下動態和靜態文本是多線的(如果使用'\ n'),所以這是一個正確的解決方案。沒有'singleLine = false',沒有'lines = 4'等等。 – CoolMind

-2

你爲什麼不來聲明一個String,而不是寫一個排長到佈局文件。爲此,你必須在佈局文件'android:text =「@ string/text」'中聲明一行代碼並轉到\\ app \ src \ main \ res \ values \ strings.xml並添加一行代碼'你的多行文本'也可以使用'\ n'來斷行,否則該行會自動調整。

2

我學到的是在你想要剎車的詞之間加入「\ n」到下一行。例如...

<TextView 
    android:id="@+id/time" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAlignment="center" 
    android:text="M-F 9am-5pm \n By Appointment Only" /> 

下午5點通過之間的\ n讓我在哪裏,我想我的我的下一行的開始和結束的更多的控制。

3

嘗試使用EditText使其不可點擊和不可聚焦,也可以顯示滾動條並刪除EditText的underbar。
下面是一個例子:

<EditText 
android:id="@+id/my_edit_text" 
android:layout_width="match_parent" 
android:layout_height="wrap_parent" 
android:inputType="textMultiLine"     <!-- multiline --> 
android:clickable="false"       <!-- unclickable --> 
android:focusable="false"       <!-- unfocusable --> 
android:scrollbars="vertical"  <!-- enable scrolling vertically --> 
android:background="@android:color/transparent" <!-- hide the underbar of EditText --> 
/> 

希望這有助於:)

2

最佳答案我發現多TextView的是:

android:inputType="textMultiLine" 
+0

對於''而不是'android:inputType'屬性是不是''? – timtim

1

首先用它的Html equavalent更換"\n""&lt;br&gt;" 然後請在字符串上撥打Html.fromHtml()。按照以下步驟操作:

String text= model.getMessageBody().toString().replace("\n", "&lt;br&gt;") 
textView.setText(Html.fromHtml(Html.fromHtml(text).toString())) 

這很好用。

0

對我而言,非解決方案無法正常工作。 我知道這不是這個問題的完整答案,但有時它可以提供幫助。

我把4個textviews放在一個垂直線性佈局中。

<Linearlayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation:"vertical" 

    ...> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text:"line1" 
     .../> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text:"line2" 
     .../> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text:"line3" 
     .../> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text:"line4" 
     .../> 
</LinearLayout> 

該解決方案適用於文本視圖文本不變的情況,如標籤。