所以这就是我想要实现的,是回收者的观点 使用3x3网格,当项目超过3x3时,它们会溢出到下一个屏幕/页面。
所以我使用了带水平滚动的recyclerview
这是迄今为止我取得的成就
当项目数为7及以上时,我当前的代码确实有效。
当计数低于7时我面临需要帮助的问题。
将我的问题列为问题
问题1:
为什么Recyclerview项目以垂直方式填充?
vars_prompt:
- name: port
prompt: "Enter port#"
private: no
我已将recyclerview设置为水平滚动,
1 4
2 5
3 6
问题2:
当我的项目数为6时,如何避免行之间的空间?
问题3:
当我的商品说4时,我想将我的商品显示为
new GridLayoutManager(this, span, GridLayoutManager.HORIZONTAL, false);
或
1 2 3
4
目前显示为
如果我将span设置为1,则生成网格为
1 3 4
2
导致4像这样离开屏幕
1 2 3 4
我想避免。
==============
Code ive使用
布局:
1 2 3 |4
适配器:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="88dp"
android:layout_height="88dp"
android:gravity="center"
android:layout_margin="10dp"
android:background="@drawable/border"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@android:color/darker_gray"
android:orientation="vertical"
android:weightSum="1">
<TextView
android:id="@+id/lblTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="TEST"
android:textSize="20sp" />
<TextView
android:id="@+id/lblDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/lblTitle"
android:layout_centerHorizontal="true"
android:text="TEST"
android:textSize="13sp" />
</RelativeLayout>
</LinearLayout>
活动
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.CustomViewHolder> {
Context ctx;
List<String> listText;
public class CustomViewHolder extends RecyclerView.ViewHolder {
TextView lblText;
public CustomViewHolder(View view) {
super(view);
view.setClickable(true);
lblText = (TextView) view.findViewById(R.id.lblDesc);
}
}
public RecyclerViewAdapter(Context ctx, List<String> listText) {
this.ctx = ctx;
this.listText = listText;
}
@Override
public RecyclerViewAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_child_row, parent, false);
return new CustomViewHolder(itemView);
}
@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
holder.lblText.setText(listText.get(position));
}
@Override
public int getItemCount() {
return listText.size();
}
}
答案 0 :(得分:1)
为什么Recyclerview项目以垂直方式填充?
1 4 2 5 3 6
RecyclerView适用于滚动列表。如果你有一个水平布局,它将填充第一列,然后是第二列,然后是第三列,等等。毕竟,这就是我们期望列表工作的方式。这就是&#34;编号关闭的原因&#34;。它从第一列开始,一旦填充就转到下一列。
当我的项目数为6时,如何避免行之间的空间?
我不知道您的设置,但我猜测您的recyclerviews高度设置为match_parent
,因此它可能只是耗尽了所有可用的高度。 Recyclerview的wrap_content
高度可能有所帮助。
当我的商品说4时,我想将我的商品显示为
1 2 3 4
或
1 3 4 2
再次,见上文,那不是RecyclerView的工作原理。它将始终逐个填充列,而不是以行开头。 4列数为2的项目将始终首先填充第一列,如下所示。
1 3
2 4
RecyclerView可能无法满足您的所有需求。您可以使用 3列切换到垂直网格布局,少于9个项目。这样它就不会水平滚动,甚至会像你描述的那样填满视图。对于超过9个项目,您仍然会显示水平版本并将其滚动。
您实际描述的是自定义布局:您希望视图以特定方式运行。您可以查看如何创建自己的ViewGroup
并使用它来布置您喜欢的所有视图。除非您想显示长列表,否则这可能是一个不错的选择。