Android表格布局格式化问题

时间:2010-12-01 21:10:22

标签: android tablelayout

我无法让我的TableLayout适合屏幕when the text cell is large,尽管文字包裹inside the cell

这是我的TableLayout。一个简单的两行,两列表。左列单元格为multiline。如果其中一个单元格的文本很大,则需要在两行中断,该列将被拉伸以填满整个屏幕,并且右列被推出屏幕。

为什么呢?如何强制全桌留在屏幕内? 任何提示都受到欢迎。

我的TableLayout如下:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myTableLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableRow>
    <TextView
        android:text="Account 4 with a very large name to see if it breaks  on two or more lines"
        android:singleLine="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
    <TextView
        android:text="$400.00"
        android:gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
</TableRow>

<TableRow>
    <TextView
        android:text="Account 5"
        android:singleLine="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
    <TextView
        android:text="$400.00"
        android:gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
</TableRow>

</TableLayout>

显示布局的代码是基本的:

public class AccountBrowserTest 
    extends Activity
{
    public void onCreate(Bundle savedInstanceState) 
    {    
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.accountbrowser_test);

    }
} 

10 个答案:

答案 0 :(得分:34)

将android:stretchColumnsandroid:shrinkColumns添加到TableLayout元素:

<TableLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:stretchColumns="1"
  android:shrinkColumns="1">

1值是您希望更改发生的列。您可以指定多个这样的值:

android:stretchColumns="0,1"

或者如果您希望对所有列进行更改,请执行以下操作:

android:stretchColumns="*"

请查看详细信息:http://android-pro.blogspot.com/2010/02/table-layout.html

答案 1 :(得分:8)

我的应用程序遇到了同样的问题,并找到了以下解决方案:

<TableLayout 
   android:shrinkColumns="0"
   android:stretchColumns="1" 
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
</TableLayout>

这适用于2列。

答案 2 :(得分:6)

我遇到了同样的问题并通过添加

解决了这个问题
android:stretchColumns="0"

到TableLayout元素并设置

android:layout_width="0dp"

在TextView上太长了。

答案 3 :(得分:5)

在表格布局中,对于希望允许缩小以适合

的列,使用shrinkColumns属性 最简单的方法是:

<TableLayout
android:shrinkColumns="*"/>

缩小所有列,或者您可以编写而不是“*”,要缩小的列索引,在您的情况下将是

<TableLayout
android:shrinkColumns="0,1"/>

请注意,列索引从零开始,因此最新代码允许第一个(index = 0)和第二个(index = 1)列缩小。

答案 4 :(得分:1)

有临时修复,请执行:

   android:stretchColumns = " (number of actual col) - 1 "

这里没有解决方案。

答案 5 :(得分:0)

对于多线单元格的宽度,可能与wrap_content有关。

您可以尝试一些方法为其提供更明确的宽度...即设置width to 0,并为所有单元格提供layout_gravity = 1。这应该导致每个列占据相同的宽度(或者你可以调整,如果你想要一个比另一个更多的重量)。

答案 6 :(得分:0)

免责声明:我对布局并不是很擅长,所以我只玩了一些有价值的东西,这似乎有效(我不能给你一个很好的解释原因):

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

    <TableRow>
        <TextView
            android:text="Account 4 with a very large name to see if it breaks  on two or more lines"
            android:singleLine="false"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
        />
        <TextView
            android:text="$400.00"
            android:gravity="right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.001"
        />
    </TableRow>

    <TableRow>
        <TextView
            android:text="Account 5"
            android:singleLine="false"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
        />
        <TextView
            android:text="$400.00"
            android:gravity="right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.001"
        />
    </TableRow>
</TableLayout>

另请注意,我没有在Activity中尝试过这种布局,我只在xml编辑器的layout-view中查看过它,但它至少看起来很好。

答案 7 :(得分:0)

您还可以尝试在TableLayout中操作stretchColumns和/或shrinkColumns。

答案 8 :(得分:0)

希望这段代码可以帮到你.. 公共类MainActivity扩展了Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:singleLine="false"
        android:text="Account 4 with a very large \n name to see if it breaks \n on two or more lines" >
    </TextView>

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:text="$400.00" >
    </TextView>
</TableRow>

答案 9 :(得分:0)

您需要很好地处理布局权重的组合。检查下面的示例。使用 layout_weight=1 和 layout_width=0dp 时,行中的所有视图都应该获得相同的宽度。

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="*"
android:stretchColumns="*">
<TableRow
    android:id="@+id/basicKeypadRow1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">
    <TextView
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="T">
    </TextView>
    <TextView
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="R">
    </TextView>
    <TextView
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Y">
    </TextView>
</TableRow>
<TableRow
        android:id="@+id/basicKeypadRow1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="R">
        </TextView>
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="O">
        </TextView>
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="W">
        </TextView>
    </TableRow>