2011-11-15 43 views
5

我不確定它只有「最後一行」,但我們有一個應用程序,它具有帶有fill_parent寬度的wrapper的高度的TextView。文本正在被Java代碼動態地放入。儘管佈局中有足夠的空間,文本的最後一行仍然沒有顯示出來。它的內部是一個相當深的視圖層次結構,所以我的猜測是在那裏的度量邏輯越來越混亂,但它非常令人沮喪。我們需要猜測文本中會有多少行,並相應地設置'android:lines'以使其正常工作。TextView填充動態切斷文本的最後一行

有人看過?在代碼中,請參見id'contentTextView'。如果我拿出'android:lines',最後一行文字消失。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/flag" 
     > 

    <include android:id="@+id/incHeader" layout="@layout/header"/> 

    <FrameLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1"> 

     <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical"> 

      <ImageView 
        android:layout_width="fill_parent" 
        android:layout_height="101dp" 
        android:background="@drawable/headershadow"/> 

      <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:visibility="invisible" 
        android:layout_weight="1"/> 


      <ImageView 
        android:layout_width="fill_parent" 
        android:layout_height="101dp" 
        android:background="@drawable/footershadow"/> 

     </LinearLayout> 

     <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/gybcontentback" 
       android:layout_gravity="center_horizontal" 
       android:orientation="vertical"> 

      <include android:id="@+id/gybHeaderInclude" layout="@layout/gybcontentheader"/> 


       <TextView 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:textColor="#4f4f4f" 
         android:paddingLeft="15dp" 
         android:paddingRight="15dp" 
         android:lines="9" 
         android:id="@+id/contentTextView"/> 

      <ImageView 
        android:layout_marginTop="15dp" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/button_blue_rascal_button" 
        android:id="@+id/buttonMoreInfo"/> 

     </LinearLayout> 

    </FrameLayout> 


    <include android:id="@+id/incFooter" layout="@layout/menu"/> 

</LinearLayout> 

Java代碼。我在onCreate中使用標準Java字符串填充TextView。

@Override 
protected String body() 
{ 
    return "Rascal Flatts and The Jason Foundation, Inc. are working together to prevent suicide.\n\n" + 
      "Your Battle Buddy (or family member) may need a friend.\n\n" + 
      "Take the pledge to B1."; 
} 

的基類調用,以獲得實際的文本

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(contentView()); 
    wireMenu(); 

    TextView headerText = (TextView) findViewById(R.id.gybHeaderText); 
    if(headerText != null) 
     headerText.setText(header()); 

    ((TextView) findViewById(R.id.contentTextView)).setText(body()); // This is where the text is set 
} 

無論如何,我煮了下去。我正在切割部件以查看剩下的部分,但仍然遇到同樣的問題。我想我可能已經找到觸發器和解決方案,但不是「原因」。

+0

我們能否看到與該問題相關的Java代碼? –

+0

凱文,看看你什麼時候調用setText()bc可能會影響wrap_content實際繪製的方式可能是有用的.. – LuxuryMode

回答

1

我煮的佈局下到坡底的部分。這裏的精簡版,這是仍在削減文本關閉:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/flag" 
     > 


    <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:orientation="vertical"> 

      <TextView 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:textColor="#4f4f4f" 
        android:id="@+id/contentTextView"/> 

      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/button_blue_rascal_button" 
        android:id="@+id/buttonMoreInfo"/> 

     </LinearLayout> 



</LinearLayout> 

的問題,我認爲,是父的LinearLayout從它裏面的ImageView的獲取其寬度。在這種混合的某個地方,TextView對於它所要求的高度得到了一個不正確的值。我想這與UI的計算方式有關。家長必須要求孩子們要求的寬度,然後回去告訴每個人他們的寬度是多少,然後要求高度。類似的東西。無論如何,下面的作品。圖像寬度爲263像素(以mdpi爲單位),所以如果我在父佈局上設置了263dp而不是wrap_content,則一切正常。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/flag" 
     > 


    <LinearLayout 
       android:layout_width="263dp" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:orientation="vertical"> 

      <TextView 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:textColor="#4f4f4f" 
        android:id="@+id/contentTextView"/> 

      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/button_blue_rascal_button" 
        android:id="@+id/buttonMoreInfo"/> 

     </LinearLayout> 



</LinearLayout> 

設置的TextView到WRAP_CONTENT工作過,雖然它,然後推動整個佈局大於我希望它是。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/flag" 
     > 


    <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:orientation="vertical"> 

      <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textColor="#4f4f4f" 
        android:id="@+id/contentTextView"/> 

      <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/button_blue_rascal_button" 
        android:id="@+id/buttonMoreInfo"/> 

     </LinearLayout> 



</LinearLayout> 

不知道這裏的外賣是什麼。總結,如果您開始看到計算的高度問題,請考慮爲父級定位一個寬度,以便UI計算不會混淆。

+0

PS。如果你有一個更詳細的解釋這個答案,我會投你的答案,即使我「回答」我自己的問題;) –

+0

這裏有一個[優秀的答案](http://stackoverflow.com/a/11246243/716588)幫助我解決它。 – CodeMonkey

0

你試過

android:singleLine="false" 
+0

我會給它一個鏡頭,但它顯示多行。只是不是最後一個。 –

+1

這沒有奏效。 –

7

我有同樣的問題。我找到了一個解決方法。 將新行「\ n」添加到您的文本中。這將始終顯示您的所有文字。

+0

這是有效的,只是當文本只有一行時,最終會在它下面留下一個空行。 –

+0

簡單而真棒! – dd619

+0

這是我最直接,最簡單的解決方案 – u2tall

2

您是否嘗試過直接使用LinearLayout將寬度和高度設置爲wrap_content的TextView?

它的工作對我來說...

+0

謝謝,它也適用於我。 –

0

我有一個不同的問題,但類似相關。以下是我認爲適合您需要的解決方案。您可以在任何類型的ViewGroup中爲TextView使用全局佈局偵聽器。

final TextView dSTextView = (TextView)findViewById(R.id.annoyingTextView); 
dSTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 
     dSTextView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 

     float lineHeight = dSTextView.getLineHeight(); 
     int maxLines = (int) (dSTextView.getHeight()/lineHeight); 

     if (dSTextView.getLineCount() != maxLines) { 
      dSTextView.setLines(maxLines); 
     } 

    } 
}); 

你可以閱讀更多關於它here

0

嘗試添加

安卓填充

在你的TextView

。爲我工作

0

將有問題的TextView放入FrameLayout(或某個容器)中。我認爲這個問題是因爲你的兄弟姐妹的觀點。