Android表格布局格式问题

Posted

技术标签:

【中文标题】Android表格布局格式问题【英文标题】:Android table layout formatting problems 【发布时间】:2011-05-18 18:26:40 【问题描述】:

我无法让我的 TableLayout 适合屏幕 when the text cell is large,尽管文本换行了 inside the cell

这是我的表格布局。一个简单的两行两列的表格。左列单元格是multiline。如果其中一个单元格的文本大到足以分成两行,则该列被拉伸以填满整个屏幕,并且右侧的列被推出屏幕。

为什么?如何强制整个表格留在屏幕内? 欢迎任何提示。

我的 TableLayout 如下:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myTableLayout"
android:layout_
android:layout_
>
<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_
        android:layout_
        >
    </TextView>
    <TextView
        android:text="$400.00"
        android:gravity="right"
        android:layout_
        android:layout_
        >
    </TextView>
</TableRow>

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

</TableLayout>

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

public class AccountBrowserTest 
    extends Activity

    public void onCreate(Bundle savedInstanceState) 
        
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.accountbrowser_test);

    
 

【问题讨论】:

【参考方案1】:

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

<TableLayout
  android:layout_
  android:layout_
  android:stretchColumns="1"
  android:shrinkColumns="1">

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

android:stretchColumns="0,1"

或者如果您希望更改发生在所有列上,如下所示:

android:stretchColumns="*"

详情请看这里:http://android-pro.blogspot.com/2010/02/table-layout.html

【讨论】:

【参考方案2】:

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

<TableLayout 
   android:shrinkColumns="0"
   android:stretchColumns="1" 
   android:layout_
   android:layout_>
</TableLayout>

这适用于 2 列。

【讨论】:

【参考方案3】:

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

android:stretchColumns="0"

到 TableLayout 元素和设置

android:layout_

在太长的 TextView 上。

【讨论】:

这到底是什么意思?你怎么知道这是解决方案?【参考方案4】:

内部表格布局对您希望允许它们收缩以适合的列使用 shrinkColumns 属性

最简单的方法是:

<TableLayout
android:shrinkColumns="*"/>

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

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

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

【讨论】:

【参考方案5】:

有临时修复,做:

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

在我的情况下没有解决方案。

【讨论】:

【参考方案6】:

免责声明:我对布局不是很擅长,所以我只玩了一些值,这似乎有效(但我无法很好地解释为什么):

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

    <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_
            android:layout_
            android:layout_weight="1"
        />
        <TextView
            android:text="$400.00"
            android:gravity="right"
            android:layout_
            android:layout_
            android:layout_weight="0.001"
        />
    </TableRow>

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

另外请注意,我没有在 Activity 中尝试过这种布局,我只是在 xml 编辑器的布局视图中查看它,但至少在那里看起来不错。

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

它可能与多行单元格宽度的wrap_content 有关。

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

【讨论】:

【参考方案9】:

希望此代码对您有所帮助.. 公共类 MainActivity 扩展 Activity

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

    <TextView
        android:id="@+id/tv1"
        android:layout_
        android:layout_
        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_
        android:layout_
        android:padding="8dp"
        android:text="$400.00" >
    </TextView>
</TableRow>

【讨论】:

【参考方案10】:

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

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

【讨论】:

以上是关于Android表格布局格式问题的主要内容,如果未能解决你的问题,请参考以下文章

android listview 列表表格怎么布局

android片段表格布局

Android基础_2 Activity线性布局和表格布局

Android——布局(线性布局linearLayout,表格布局TableLayout,帧布局FrameLayout)

在android中自定义表格布局

Android ConstraintLayout 约束布局 Flow 流式布局,表格布局