TableLayout 拒绝 match_parent

TableLayout refuses to match_parent

我有一个 xml 布局,用作 ListView 中的一个项目。问题是:当它被添加到那里时,项目的宽度不会拉伸到 match_parent,而是包裹内容。它在ListView中使用,所以它的宽度需要是match_parent。我一直在通过 Whosebug 阅读它,尝试所有可用的解决方案,但结果为零: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>

我想你想要的是tableLayout.setStretchAllColumns(true);。不幸的是,您不能在 xml 中设置它,或许可以将它放在您的适配器中。

在你的TableLayout

中添加android:stretchColumns="*"属性

android:stretchColumns

The zero-based index of the columns to stretch. The column indices must be separated by a comma: 1, 2, 5. Illegal and duplicate indices are ignored. You can stretch all columns by using the value "*" instead. Note that a column can be marked stretchable and shrinkable at the same time.

<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>

希望这会有所帮助。

None 提到的解决方案对我有帮助,所以尝试解决这个问题 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);