Recyclerview水平跨度和间距问题

时间:2017-09-13 20:26:05

标签: android android-recyclerview

所以这就是我想要实现的,是回收者的观点 使用3x3网格,当项目超过3x3时,它们会溢出到下一个屏幕/页面。

所以我使用了带水平滚动的recyclerview

这是迄今为止我取得的成就

enter image description here

当项目数为7及以上时,我当前的代码确实有效。

当计数低于7时我面临需要帮助的问题。

将我的问题列为问题

问题1:

为什么Recyclerview项目以垂直方式填充?

vars_prompt:  
   - name: port
     prompt: "Enter port#"
     private: no

我已将recyclerview设置为水平滚动,

1 4
2 5
3 6

问题2:

当我的项目数为6时,如何避免行之间的空间?

enter image description here

问题3:

当我的商品说4时,我想将我的商品显示为

new GridLayoutManager(this, span, GridLayoutManager.HORIZONTAL, false);

1 2 3
4

目前显示为

enter image description here

如果我将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();
    }
}

1 个答案:

答案 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并使用它来布置您喜欢的所有视图。除非您想显示长列表,否则这可能是一个不错的选择。