TableLayout拒绝match_parent

时间:2017-10-04 08:24:00

标签: android xml layout tablelayout

我有一个xml布局,用作ListView中的项目。问题是:当它被添加到那里时,项目的宽度不会被拉伸到match_parent,而是包含内容。它在ListView中使用,因此其宽度必须为match_parent。我已经在stackoverflow上阅读了它,尝试了所有可用的解决方案,但我得到的结果为零:layout_weight设置为1对我的布局没有任何作用,拉伸列给了我最好的结果宽度,但就布局而言,它失败了。

这里有什么可以做的吗?

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants">

    <TableRow
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <CheckBox
            android:id="@+id/trackCheckBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:clickable="false"
            android:duplicateParentState="true" />

        <TextView
            android:id="@+id/trackNumberText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:text="00."
            android:textColor="@android:color/black"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/trackTitleText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_column="2"
            android:layout_weight="1"
            android:text="Title"
            android:textColor="@android:color/black"
            android:textSize="18sp" />
    </TableRow>

    <TableRow
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <TextView
            android:id="@+id/trackArtistText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_column="2"
            android:layout_weight="1"
            android:text="Artist" />
    </TableRow>
</TableLayout>

3 个答案:

答案 0 :(得分:2)

TableLayout

中添加android:stretchColumns="*"媒体资源

机器人:stretchColumns

  

要拉伸的列的从零开始的索引。列索引   必须用逗号分隔:1,2,5。非法和重复索引   被忽略了。您可以使用值“*”拉伸所有列   代替。请注意,列可以标记为可伸缩和可收缩   在同一时间。

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
     android:stretchColumns="*"
    android:descendantFocusability="blocksDescendants">

.....

</TableLayout>

希望这会有所帮助。

答案 1 :(得分:0)

我认为你想要的是tableLayout.setStretchAllColumns(true);。不幸的是,你不能在xml中设置它,也许把它放在你的适配器中。

答案 2 :(得分:0)

所提到的解决方案都没有帮助过我,所以试图解决这个问题3天我自己找到了解决方案。不幸的是,该解决方案是程序化的,以下代码将添加到您的自定义适配器:

trackCheckBox.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
trackNumberText.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int width = context.getResources().getDisplayMetrics().widthPixels - trackCheckBox.getMeasuredWidth() - trackNumberText.getMeasuredWidth();

trackArtistText.setWidth(width);
trackTitleText.setWidth(width);