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

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: android layout width tablelayout


    【解决方案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_width="match_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="1"
        android:shrinkColumns="0" >
    </TableLayout>
    

    【讨论】:

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

    这对我有用..

    tableLayout.setColumnShrinkable(1,true);
    

    【讨论】:

    • 太棒了!第一个参数是列,第二个参数设置它可收缩!谢谢!
    【解决方案4】:
    <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>
    

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

    【讨论】:

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

    试试这个,确保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>
    

    【讨论】:

      【解决方案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_width="fill_parent"
             />
      

      【讨论】:

      • EditText 中的提示和值被扭曲了——我只能看到第一个字母。有什么解决办法吗?
      • 请注意,即使这是旧的:如果您使用 0 值,请考虑仅使用 0px。 sp 表示 Android 将对其应用缩放值,并且 0 * any = 0
      猜你喜欢
      • 2012-01-24
      • 2014-06-02
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多