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:stretchColumns
和 android: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——布局(线性布局linearLayout,表格布局TableLayout,帧布局FrameLayout)