2010-10-30 69 views
31

我有一个两列的TableLayout作为滚动视图的唯一子对象。第一列包含TextViews('标签'),第二列包含EditText/Spinner/DateWidget等('values')。即使我已经为TableLayout,TableRow &指定了android:layout_width =“fill_parent”(在'values'列中)。Android TableLayout Width

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

我该如何解决这个问题?

感谢

回答

57

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

试试看看是否有效。

+0

这是终于为我做的唯一的事情。还要注意,如果你在TableLayout上设置了shrinkColumns或stretchColumns,那么这会对所有事情产生不利影响。 – 2011-04-08 16:18:48

+0

这个答案对我来说并不清楚,你的意思是在所有TableRow组的所有孩子上设置权重?如果是这样,使用TableLayout的意义何在?为什么不只是使用LinearLayouts?我建议在给你麻烦的列上设置拉伸和收缩。 – satur9nine 2014-01-17 18:45:45

0

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

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:stretchColumns="1"> 
    <TableRow android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 

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

我在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_width="fill_parent" 
     /> 
+0

EditText中的提示和值变形 - 我只能看到第一个字母。任何解决方法? – 2010-11-17 05:42:36

+0

请注意,即使这是旧的:如果您使用0值,请考虑只使用0px。 sp表示Android会对其应用缩放值,并且0 * anything = 0 – 2012-09-18 13:35:40

7

这个工作对我..

tableLayout.setColumnShrinkable(1,true); 
+1

太棒了!第一个参数是列,第二个设置它是可缩小的!感谢名单! – Paschalis 2013-07-22 00:03:45

5
<TableLayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp"> 
<TableRow 
android:layout_height="fill_parent" 
android:layout_width="fill_parent"> 
<TextView 
android:layout_width="wrap_content" 
android:text="Name " 
android:layout_height="fill_parent"> 
</TextView> 
<EditText 
android:layout_width="0dp" 
android:layout_weight="1" 
android:hint="name" 
android:layout_height="wrap_content" 
> 
</EditText> 
</TableRow> 
</TableLayout> 

此代码为我工作对齐的第一列和编辑文本填充父文本视图。

+0

当您的单元格需要行与行之间的不同大小 – Diesel 2017-09-01 17:24:40

20

解决此问题的实用方法是使用TableLayout中的stretchColumnsshrinkColumns属性。它们的值应该是基于0的列索引。

举例来说,如果你有一个两列的表布局和:

  • 你想在第二列空的空间(拉伸),因此TableLayout填补适合在大屏幕上,整个父视图设备
  • 您想第一列的小屏幕设备上收缩(和它的内容可能包/ ellipsized)

您将定义您的TableLayout为:

<TableLayout 
    android:id="@+id/my_table_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:stretchColumns="1" 
    android:shrinkColumns="0" > 
</TableLayout> 
+2

时,此方法有很大帮助还要注意,您既可以拉伸也可以缩小列。在我的TextView列上这样做可以防止它超出屏幕大小,但也可以填充可用空间。 – satur9nine 2014-01-17 18:39:00