我想知道是否有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));
}
答案 0 :(得分:0)
如果我正确理解了您的问题,并且您希望在不同大小的多个列/行中显示项目,则必须在您的RecyclerView的案例StaggeredGridLayoutManager中设置LayoutManger。
int orientation = StaggeredGridLayoutManager.VERTICAL;
int spanCount = 2;
表示垂直方向spanCount是列数,否则如果orientation是水平的,则spanCount是行数。
StaggeredGridLayoutManager gridLayoutManager = new StaggeredGridLayoutManager(spanCount, orientation);
recyclerView.setLayoutManager(gridLayoutManager);