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