2012-04-16 43 views
2

我非常接近LinearLayout的替代方案,但它的刺激性沒有得到正確的。爲了獲得最大的靈活性,我只定義了一個行標題定義了一個TableLayout xml。接下來,我生成了一個獨立的TableRow xml,定義了「行模板」。在Java代碼中,我已經將TableRow子類化了,並且在構造函數中我膨脹了tablerow模板以連接到根(子類)。Layouttrouble擴展tablerow和充氣xml表

嗯,迄今爲止還不錯。當表填充時,表頭是正常的,但其他行不是。看起來它們是以不同的方式佈置的,這兩列沒有像預期的那樣填滿整個寬度,因此,色狼並沒有正確對齊。

任何人都可以透露一下這個嗎?我已經嘗試了很多解決方案,但是沒有任何解決方案。

與標題行的tablelayout

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" > 

    <HorizontalScrollView 
     android:id="@+id/horizontalScrollView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fillViewport="true" > 

     <TableLayout 
      android:id="@+id/zone_table" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:stretchColumns="*" > 

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

       <TextView 
        android:layout_width="0dip" 
        android:layout_weight="0.8" 
        android:background="#ffcccccc" 
        android:text="Zonename" 
        android:textColor="@android:color/black" /> 

       <TextView 
        android:layout_width="0dip" 
        android:layout_weight="0.2" 
        android:background="#ffcccc00" 
        android:gravity="right" 
        android:text="Antall" 
        android:textColor="@android:color/black" /> 
      </TableRow> 
     </TableLayout> 
    </HorizontalScrollView> 

</ScrollView> 

「其他」 充氣排

<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/zonetablerow" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
> 

    <TextView 
     android:id="@+id/zonerow_name" 
     android:layout_width="0dip" 
     android:layout_weight="0.8" 
     android:background="#ffcccccc" 
     android:textSize="18dp" /> 

    <TextView 
     android:id="@+id/zonerow_invcount" 
     android:layout_width="0dip" 
     android:layout_gravity="right" 
     android:layout_weight="0.2" 
     android:background="#ffcccc00" 
     android:textSize="18dp" /> 

</TableRow> 

延伸的TableRow

public class ZoneRow extends TableRow { 
    private ZoneInventoryDAO dao = null; 
    private int inventoryCount = 0; 

    public ZoneRow(Context ctx, ZoneInventoryDAO dao) { 
     this(ctx, dao, 0); 
    } 

    public ZoneRow(Context ctx, ZoneInventoryDAO dao, int inventoryCount) { 
     super(ctx); 
     setWeightSum(1.0f); 
     this.dao = dao; 
     this.inventoryCount = inventoryCount; 
     doLayout(); 
    } 

    private void doLayout() { 
     // XML layouten settes med zonerow som parent (se: 
     // http://developer.android.com/resources/articles/layout-tricks-merge.html) 
     View v = LayoutInflater.from(getContext()).inflate(R.layout.zonerow, 
       this, true); 
     TextView t = (TextView) findViewById(R.id.zonerow_name); 
     TextView cnt = (TextView) findViewById(R.id.zonerow_invcount); 

     t.setText(dao.getZoneAlias()); 
     cnt.setText(String.valueOf(inventoryCount)); 

    } 

    public void incInventory() { 
     inventoryCount++; 
    } 

    public ZoneInventoryDAO getDAO() { 
     return dao; 
    } 

} 

回答

0

是什麼樣子的是,要擴展tablerow的類並創建該對象的一個​​實例。這將導致一個表格行被創建。然後你正在膨脹另一個由於某種原因與第一個相互作用的表。爲了快速修復,請嘗試添加類似table.setColumnStretchable(0,true)的東西;

0

我遇到同樣的問題。我通過不這樣做來修復它 - 特別是不通過子類化TableRow,而只是在代碼中實例化它們,並手動將所需的任何東西應用於它們。你可以通過封裝來代替。有一些記錄具有ZoneInventoryDAO,inventoryCount和tableRow,它們指向相應的TableRow實例。只是用通貨膨脹實例化TableRow:

TableLayout table = (TableLayout) inflater.inflate(R.layout.my_table, null); // etc 
... 
for (//each data item//) { 
    TableRow tr = (TableRow) inflater.inflate(R.layout.my_table_row, null); 
    TextView tv1 = (TextView) findViewById(R.id.table_entry_1); 
    tv1.setText("Whatever goes here"); 
    ... 
    // and so on for each column 
    table.addView(tr); 
} 

上面的代碼將相同的代碼移動到擴展TableRow時沒有的類中。

0

我知道這是舊的,但我有同樣的問題,並找出它,所以也許這將有助於未來的用戶。

問題是,當您從XML擴展TableRow,並將其添加到您的擴展TableRow中時,它將被Table看作一個具有多個子項的列,因爲Layout中的TableRow本質上一個ViewGroup。因此它將表格作爲單列表格進行佈局。

解決方法是,在TableRow XML佈局中,使用<merge>類型,而不是<TableRow>類型。這種方式在充值時,xml中的項目將合併到擴展的TableRow中,而擴展的TableRow將包含多個colums。

下面是示例代碼

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/zonetablerow" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
> 

    <TextView 
     android:id="@+id/zonerow_name" 
     android:layout_width="0dip" 
     android:layout_weight="0.8" 
     android:background="#ffcccccc" 
     android:textSize="18dp" /> 

    <TextView 
     android:id="@+id/zonerow_invcount" 
     android:layout_width="0dip" 
     android:layout_gravity="right" 
     android:layout_weight="0.2" 
     android:background="#ffcccc00" 
     android:textSize="18dp" /> 

</merge>