2013-11-15 67 views
0

我需要得到一個TableLayout來匹配它的父LinearLayout的寬度,但我不能讓它工作。TableLayout不會match_parent LinearLayout寬度

在下面的第一個屏幕截圖中,「短標題」是垂直LinearLayout中的第一個視圖。下面的「Fields」是一個TableLayout的成員,它是垂直LinearLayout中的第二個視圖。

當「標題」文本不需要與TableLayout相同的寬度時,所有內容都按預期對齊。

當「標題」需要比TableLayout更大的寬度時,TableLayout與「標題」不匹配,如您在第二個屏幕截圖中所看到的。

我該如何讓TableLayout與LinearLayout的寬度匹配?

注:的LinearLayout需要「包裝」,以顯示它的內容所需要的,所以設置一固定的寬度的最小寬度的鹼沒有一個解決方案

Short Header

Long Header

此測試的佈局XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/mainLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <LinearLayout 
     android:id="@+id/baseLinerLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="#FFAAAAAA" > 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:padding="10dp" 
      android:background="#FF000000" 
      android:textColor="#FFFFFFFF" 
      android:text="Long header to make base layout wider than table layout" /> 

      <TableLayout 
      android:id="@+id/tableLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#33FFFFFF" > 

      <TableRow 
       android:id="@+id/tableRow1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:gravity="center" 
        android:padding="10dp" 
        android:background="#44FFFFFF" 
        android:textColor="#FF000000" 
        android:text="Field (0,0)" /> 

       <TextView 
        android:gravity="center" 
        android:padding="10dp" 
        android:background="#88FFFFFF" 
        android:textColor="#FF000000" 
        android:text="Field (0,1)" /> 

      </TableRow> 

      <TableRow 
       android:id="@+id/tableRow2" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:gravity="center" 
        android:padding="10dp" 
        android:background="#88FFFFFF" 
        android:textColor="#FF000000" 
        android:text="Field (0,1)" /> 

      </TableRow> 
     </TableLayout> 
    </LinearLayout> 
</RelativeLayout> 

回答

4
<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
      android:layout_weight="1 --- this worked for me" 
      android:gravity="center" 
      android:padding="10dp" 
      android:background="#44FFFFFF" 
      android:textColor="#FF000000" 
      android:text="Field (0,0)" /> 
    <TextView 
      android:layout_weight="1" 
      android:gravity="center" 
      android:padding="10dp" 
      android:background="#88FFFFFF" 
      android:textColor="#FF000000" 
      android:text="Field (0,1)" /> 

</TableRow> 
+0

它的工作是你upwote? – ismail

+2

謝謝。我試着設置'android:stretchColumns =「1」'來讓第二列伸展並填充表格的空白寬度,但它使表格填滿了屏幕的寬度。您將每行第二個視圖的權重設置爲1的建議達到了我認爲'stretchColumns'通過閱讀API文檔的目的。它表明'stretchColumns'屬性可能有點壞了吧? –

+0

某些時候某些應該工作但不需要的屬性。我認爲這是因爲某些父母風格或因版本問題而導致最糟糕的 – ismail

1

由於您使用的是沒有設置寬度的TextView,我建議您將所有字段的參數設置爲match_parent

編輯: 爲什麼你需要第二個LinearLayout?它似乎沒用,因爲它只包裝TableLayout。

+0

感謝您的建議。不幸的是,我已經玩過將字段的佈局寬度設置爲「match_parent」或「wrap_content」,但它沒有效果。在API文檔中,它聲明*「TableLayout的子項不能指定layout_width屬性,width始終是MATCH_PARENT。」*,所以我刪除了這些行,因爲它們被忽略。 –

+0

你是對的。額外的LinearLayout是不必要的。爲了從浮動對話框中測試這個問題,簡化了XML,該對話框將其他視圖添加到第二個LinearLayout。我現在編輯了問題中的代碼以擺脫它。謝謝 –

1

你需要得到基本的LinearLayout的寬度編程的Java文件...

How to get width ? Check here

後,美可以用同樣寬度

TableLayout layout = (TableLayout)findViewById(R.id.tableLayout); 
    // Gets the layout params that will allow you to resize the layout 

LayoutParams params = layout.getLayoutParams(); 

// Changes the height and width to the specified *pixels* 

params.width = x; 

layout.setlayoutparams(params); 
設置表格佈局的寬度

x是您從線性佈局獲得的寬度