GridLayoutManager – 列宽包装自己的最大的孩子

我在HorizontalScrollView里面有一个RecyclerView ,我希望它使用一个GridLayoutManager 。 这是好的,但有一件事仍然困扰着我,每列的宽度是相同的(根据我认为最大的单元格宽度?)。 是否有可能包装的列的宽度匹配此特定列的最大单元格?

它应该看起来像这样:

在这里输入图像说明

橙色部分是电池片所采取的部分。


编辑

我们要求我澄清我的期望。 一个例子比单词好,在这里你可以看到一个带有GridLayoutManager的RecyclerView截图。 每个项目都是一个简单的TextView,包含10到40个字符之间的随机文本。 RecyclerView位于前面所述的Horizo​​ntalScrollView内部。 我们可以看到每个列都有相同的宽度,尽pipe这个列中没有项目可以满足整个宽度。 我想要的是去除那些无用的空白空间,并且有不同大小的列,每列都与自己最大的孩子的宽度相匹配。

在这里输入图像说明

如果你想testing这种行为,你可以克隆我上传到Github的回购: https : //github.com/ShargotthDev/TestGrid

如问,这是我的XML布局(非常基本):

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <HorizontalScrollView android:id="@+id/gameplay_hotizontalScroll_ScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="70dp"> <android.support.v7.widget.RecyclerView android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/recycler_view" /> </HorizontalScrollView> </RelativeLayout> 

编辑2

我应该提到,一些单元格的span大小可能大于1,LayoutManager应该是垂直的,这样这些单元格会在水平方向而不是垂直方向占据更多的位置(不知道自己是否可以理解)。

谢谢你的时间 !

Solutions Collecting From Web of "GridLayoutManager – 列宽包装自己的最大的孩子"

您不需要将您的RecyclerView放在Horizo​​ntalScrollView中。 请参阅下面的代码。

 public class MainActivity extends AppCompatActivity { String[] list = new String[]{"Some text goes here", "Some small", "text", "goes here", "Some", "very large text", "goes here", "Some text goes here", "Some small", "text", "goes here", "Some", "very large text", "goes here"}; RecyclerView grid; GridAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); grid = (RecyclerView)findViewById(R.id.grid); grid.setLayoutManager(new GridLayoutManager(this, 2, LinearLayoutManager.HORIZONTAL, false)); grid.setHasFixedSize(true); adapter = new GridAdapter(list); grid.setAdapter(adapter); } } 

适配器类

 public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder>{ String[] mList; public GridAdapter(String[] list) { mList = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.bind(mList[position]); } @Override public int getItemCount() { return mList.length; } public class ViewHolder extends RecyclerView.ViewHolder { TextView textView; public ViewHolder(View itemView) { super(itemView); textView = (TextView)itemView.findViewById(R.id.text); } public void bind(String s) { textView.setText(s); } } } 

row.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="match_parent" android:padding="10dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

activity_main.xml中

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="cab.suresh.gridlayoutexample.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/grid" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> 

编辑像这样把你的RecyclerView放入NestedScrollView

 <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none"> <android.support.v7.widget.RecyclerView android:id="@+id/grid" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.widget.NestedScrollView> 

并像这样设置你的spanCount数量

spanCount = 8;

 grid.setLayoutManager(new GridLayoutManager(this, spanCount, LinearLayoutManager.HORIZONTAL, false));