2011-12-26 42 views
2

我的問題是多行文本在我的xml模板中正常工作。如果文字寬於屏幕,則會將其包裝到下一行。但是,如果我嘗試同樣在Java中,文本不會被包裝:使用Java代替xml時多行文本中的不同行爲

我有我的測試前瞻性佈局以下XML模板:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal" 
    > 
    <ScrollView 
      android:id="@+id/scrollView" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal"> 
    <TableLayout 
      android:id="@+id/messageTable" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:stretchColumns="*" 
      android:clickable="false"> 
     <TableRow 
      android:layout_width="fill_parent" 
      android:background="#777777" 
      android:textColor="#FFFFFF" 
      android:clickable="false"> 
      <TextView 
       android:id="@+id/topic" 
       android:text="This is the topic"    
       android:textColor="#FFFFFF" 
       android:layout_width="fill_parent" 
       android:textSize="14sp" 
       android:paddingLeft="5sp" 
       android:paddingRight="5sp" 
       android:paddingTop="2sp" 
       android:paddingBottom="2sp" 
       android:textStyle="bold" 
       android:clickable="false" 
       /> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:text="Mo., 26.12.2011, 10:00 - This is some example text. It will be wrapped in view. This works." 
       android:textSize="14sp" 
       android:paddingLeft="5sp" 
       android:paddingRight="5sp" 
       android:paddingTop="2sp" 
       android:paddingBottom="2sp" 
       android:scrollHorizontally="false" 
       android:inputType="textMultiLine" 
       android:longClickable="false" 
       android:clickable="false" 
       android:layout_width="0sp" 
       /> 
     </TableRow> 
. 
. 
. 

現在,我想用這些零件xml在我的Java代碼中。表格行應該動態生成,具體取決於我在真實應用程序中收到的數據。現在真正的應用程序的XML看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|center_horizontal" 
    > 
    <ScrollView 
      android:id="@+id/scrollView" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|center_horizontal"> 
    <TableLayout 
      android:id="@+id/messageTable" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:stretchColumns="*" 
      android:clickable="false"> 
    </TableLayout> 
. 
. 
. 

在代碼中,我用自己的類型我的文字行,文字的主題和文本機構:

TopicTableRow:

public class TopicTableRow extends TableRow { 

    public TopicTableRow(Context context) { 
     super(context); 

     setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     setBackgroundColor(Color.parseColor("#777777")); 
     setClickable(false); 
    } 
} 

TopicTextView:

public class TopicTextView extends TextView { 

    public final String TAG = "TopicTextView"; 

    public TopicTextView(Context context) { 
     super(context); 

     PixelCalc pixelCalc = new PixelCalc(context, TAG); 

     setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     setPadding(pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2), pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2)); 

     setTextColor(Color.parseColor("#FFFFFF")); 
     setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f); 
     setTypeface(Typeface.DEFAULT_BOLD); 

     setClickable(false); 
    } 
} 

和BodyTextView(不包裝文本)看起來像這樣:

public class BodyTextView extends TextView { 

    public final String TAG = "BodyTextView"; 

    public BodyTextView(Context context) { 
     super(context); 

     PixelCalc pixelCalc = new PixelCalc(context, TAG); 

     setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT)); 
     setPadding(pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2), pixelCalc.scaledPixelToPixel(5), pixelCalc.scaledPixelToPixel(2)); 

     setClickable(false); 
     setLongClickable(false); 

     setHorizontallyScrolling(false); 

     setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f); 
      setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE); 
    } 
} 

(如您所見,寬度設置與模板XML中的完全相同)。 在Java代碼中,我添加了一個主題,後跟一個「body」。這些是方法。 (一切工作正常,但文字不裹):

private void addTopic(String text) { 
    TopicTableRow topicTableRow = new TopicTableRow(this); 
    TopicTextView topicTextView = new TopicTextView(this); 

    topicTextView.setText(text); 

    topicTableRow.addView(topicTextView); 
    messageTable.addView(topicTableRow);   
} 

private void addStandardText() { 
    TableRow tableRow = new TableRow(this); 
    BodyTextView bodyTextView = new BodyTextView(this); 

    bodyTextView.setText(getString(R.string.standardText)); 

    tableRow.addView(bodyTextView); 
    messageTable.addView(tableRow); 
} 

我懷疑該行BodyTextView的setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT));不能正常工作,因爲當我設置layoutWidth至100或200,寬度不會被最小化並伸出屏幕。這是爲什麼?如果我嘗試將主題縮短到200(TopicTextView),我會得到一個更小的欄,所以Java方法應該可以正常工作,但在BodyTextView中它會忽略寬度。有人知道爲什麼這樣嗎?我已經想過this bug但我不確定。而不是

回答

1

解決: 我不知道爲什麼但是...

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

代替

setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);

完成這項工作。

0


機器人:stretchColumns = 「*」`
使用
機器人:shrinkcolumns = 「0」
或參考以下鏈接:http://android-pro.blogspot.com/2010/02/table-layout.html

+0

對我來說這是什麼目標?當我縮小表格時,所有列的大小與最寬的內容大小相同。此外,文字也不包裹。 – Bevor 2011-12-26 12:50:11

相關問題