RecyclerView自动尺寸列

时间:2016-10-25 01:22:51

标签: android android-recyclerview

我想知道是否有RecyclerView TableLayout中的自动调整/延伸/自动调整?

我已经使用TableLayout来显示数据库中的数据,但它太慢了,需要大约3秒多才能显示数据。

我已用RecyclerView替换它,它可以立即显示数据,但它不提供stretchColumns选项,并且所有文本都被挤压。

目前,我已从数据库中检索字段的最大长度,并计算可能的宽度。但是这个解决方案还不够好,有些列对于数据来说太宽了。这是我的代码:

回收商视图的布局

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
    android:fillViewport="true">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true" >

        <android.support.v7.widget.RecyclerView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/data_recycler"/>
    </HorizontalScrollView>
</ScrollView>

行的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="horizontal"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/col1"
        android:textSize="18sp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/col2"
        android:textSize="18sp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"/>
</LinearLayout>

ViewHolder

private class ViewItem extends RecyclerView.ViewHolder {
    private TextView col1;
    private TextView col2;

    ViewItem(View view) {
        super(view);

        col1 = (TextView) view.findViewById(R.id.col1);
        col1.setWidth(GetTextWidth(col1, columnWidth.get(0)));
        col2 = (TextView) view.findViewById(R.id.col2);
        col2.setWidth(GetTextWidth(col2, columnWidth.get(1)));
    }
}

private static int GetTextWidth(TextView textView, long stringLength) {
    String str = new String(new char[Integer.parseInt(stringLength + "")]).replace("\0", "W");
    return Math.round(textView.getPaint().measureText(str));
}

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,并且您希望在不同大小的多个列/行中显示项目,则必须在您的RecyclerView的案例StaggeredGridLayoutManager中设置LayoutManger。

int orientation = StaggeredGridLayoutManager.VERTICAL;
int spanCount = 2;

表示垂直方向spanCount是列数,否则如果orientation是水平的,则spanCount是行数。

StaggeredGridLayoutManager gridLayoutManager = new StaggeredGridLayoutManager(spanCount, orientation);
recyclerView.setLayoutManager(gridLayoutManager);