Android 表格布局宽度

Posted

技术标签:

【中文标题】Android 表格布局宽度【英文标题】:Android TableLayout Width 【发布时间】:2011-05-02 19:40:06 【问题描述】:

我有一个两列 TableLayout 作为滚动视图的唯一子项。第一列包含TextViews(“标签”),第二列包含EditText/Spinner/DateWidget等(“值”)。即使我已经为 TableLayoutTableRow 和所有小部件(在“值”列中)指定了 android:layout_width="fill_parent"

创建活动时屏幕看起来很完美。但是,当在EditText 中键入一个非常长的值时,“值”列会超出可见的屏幕区域。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您可能希望通过使用权重来定义列的大小。因此,您将定义表格布局高度以填充父级,但对于每一列,您应该将宽度设置为“0px”,并将权重设置为您希望列跨越的百分比。因此,假设您希望第一列是屏幕宽度的 30%,您将其权重设置为“0.3”,将第二列设置为“0.7”。

试试看是否可行。

【讨论】:

这是最终为我完成的唯一一件事。请注意,如果您在 TableLayout 上设置了 shrinkColumns 或 stretchColumns,那么这可能会对所有内容产生不利影响。 这个答案我不清楚,你的意思是为所有 TableRow 组的所有孩子设置权重?如果是这样,那么使用 TableLayout 有什么意义呢?为什么不直接使用 LinearLayouts?我建议在给您带来麻烦的列上同时设置拉伸和收缩。【参考方案2】:

解决这个问题的实用方法是使用TableLayout 中的stretchColumnsshrinkColumns 属性。它们的值应该是从 0 开始的列索引。

例如,如果您有一个两列表格布局并且:

您希望第二列填充空白空间(拉伸),以便TableLayout 适合大屏幕设备上的整个父视图 您希望在小屏幕设备上缩小第一列(其内容可能被包裹/椭圆化)

您可以将TableLayout 定义为:

<TableLayout
    android:id="@+id/my_table_layout"
    android:layout_
    android:layout_
    android:stretchColumns="1"
    android:shrinkColumns="0" >
</TableLayout>

【讨论】:

另请注意,您可以拉伸和收缩列。在我的 TextView 列上这样做可以防止它超出屏幕大小,但也可以填满可用空间。【参考方案3】:

这对我有用..

tableLayout.setColumnShrinkable(1,true);

【讨论】:

太棒了!第一个参数是列,第二个参数设置它可收缩!谢谢!【参考方案4】:
<TableLayout 
android:layout_ 
android:layout_
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp">
<TableRow 
android:layout_
android:layout_>
<TextView 
android:layout_
android:text="Name " 
android:layout_>
</TextView>
<EditText 
android:layout_
android:layout_weight="1"
android:hint="name"
android:layout_ 
>
</EditText>
</TableRow>
</TableLayout>

此代码对我来说可以在第一列上对齐文本视图并编辑文本填充父级。

【讨论】:

当您的单元格需要逐行不同的大小时,这种方法很有帮助【参考方案5】:

试试这个,确保android:singleLine="false"android:inputType="textMultiLine"

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_ android:layout_
    android:stretchColumns="1">
    <TableRow android:layout_
        android:layout_>

        <TextView android:text="Label:" />
        <EditText android:id="@+id/entry" android:inputType="textMultiLine"
            android:layout_ android:layout_
            android:singleLine="false" />
    </TableRow>
</TableLayout>

【讨论】:

【参考方案6】:

Android 2.2 上的 EditText 也有类似的问题。在我的情况下,添加 android:maxWidth="0sp" 属性会有所帮助。现在 EditText 字段显示为我想要的 - 所以它仍然与其他 EditText 字段的大小相同,但是当输入长文本时它不会调整大小。

这是我的 EditText 定义:

<EditText android:id="@+id/extra_edit"
       android:padding="3dip"
       android:inputType="textImeMultiLine"
       android:maxWidth="0sp"
       android:layout_
       />

【讨论】:

EditText 中的提示和值被扭曲了——我只能看到第一个字母。有什么解决办法吗? 请注意,即使这是旧的:如果您使用 0 值,请考虑仅使用 0px。 sp 表示 Android 将对其应用缩放值,并且 0 * any = 0

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

TableLayout(表格布局)

table-layout

iOS 自动布局:表格视图单元格宽度 = 0

table-layout:fixed的作用

chrome vs FF/IE/Opera 计算表格单元格宽度? (表格布局:固定)

固定表格布局,固定列的宽度,溢出字隐藏