0

我有一個TableLayout定義爲我試圖以編程方式添加到一個垂直的LinearLayout,其重心是「中心」的佈局資源。這是我使用的代碼:內的LinearLayout編程方式添加的TableView不會尊重它的引力

LayoutInflater inflater = getLayoutInflater(); 
LinearLayout ll = (LinearLayout) findViewById(R.id.testLinearLayout); 
TableLayout myTable = (TableLayout) inflater.inflate(R.layout.table2x2, null); 
ll.addView(myTable); 

myTable的被添加,但不是在中心之中,它的垂直居中和左對齊。如果不是以編程方式添加它,我硬編碼TableLayout定義在LinearLayout中心重力是尊重。我知道我必須錯過一些東西,但我無法弄清楚。

的LinearLayout:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:id="@+id/testLinearLayout" 
    android:layout_weight="1" 
    android:gravity="center"> 
</LinearLayout> 

它具有重量,因爲它是一個橫向佈局的一部分。

TableLayout:

<?xml version="1.0" encoding="utf-8"?> 

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content"> 

<TableRow 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:text="\" 
     android:id="@+id/textView2x2_o" 
     android:gravity="center" /> 

    <TextView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:text="0" 
     android:id="@+id/textView2x2_c0" 
     android:gravity="center" /> 

    <TextView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:text="1" 
     android:id="@+id/textView2x2_c1" 
     android:gravity="center" /> 

</TableRow> 

<TableRow 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:text="0" 
     android:id="@+id/textView2x2_r0" 
     android:gravity="center" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="0" 
     android:id="@+id/textView2x2_0" 
     android:gravity="center" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="0" 
     android:id="@+id/textView2x2_1" 
     android:gravity="center" /> 

</TableRow> 

<TableRow 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:text="1" 
     android:id="@+id/textView2x2_c2" 
     android:gravity="center" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="0" 
     android:id="@+id/textView2x2_4" 
     android:gravity="center" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="0" 
     android:id="@+id/textView2x2_5" 
     android:gravity="center" /> 

</TableRow> 

</TableLayout> 

回答

0

你不通過根到充氣方法

TableLayout myTable = (TableLayout) inflater.inflate(R.layout.table2x2, null); 

應該

TableLayout myTable = (TableLayout) inflater.inflate(R.layout.table2x2, ll, false); 

此處瞭解詳情:http://www.doubleencore.com/2013/05/layout-inflation-as-intended/

+0

它的工作原理!我試圖用兩個參數方法指定LinearLayout作爲根,但它使我的應用程序崩潰。特別感謝您對該解釋的鏈接! – cthulhufhtagn 2014-10-07 10:50:04

+0

可能你作爲第三個參數傳遞了true。第三個參數告訴你是否應該將視圖附加到根。如果將其設置爲true,然後嘗試添加視圖,則會看到一個異常,告訴您該視圖已經擁有父視圖。這意味着,如果你傳遞true,你應該刪除addView,如果你傳遞false,你應該調用addView。 – 2014-10-07 10:52:10