gpt4 book ai didi

android - Recyclerview 水平跨度和间距问题

转载 作者:行者123 更新时间:2023-11-30 00:21:28 26 4
gpt4 key购买 nike

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

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

这是我目前取得的成就

enter image description here

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

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

将我的问题列为问题

问题 1:

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

1 4
2 5
3 6

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

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

问题 2:

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

enter image description here

问题 3:

当我的项目是 4 时,我想将我的项目显示为

1 2 3
4

1 3 4
2

当前显示为

enter image description here

如果我将 span 设置为 1,我会将网格设置为

1 2 3 4

导致 4 像这样离开屏幕

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();
}
}

Activity

public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerTest;
private GridLayoutManager gridLayoutRecyclerview;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerTest = (RecyclerView) findViewById(R.id.recyclerTest);
List<String> items = Arrays.asList("1", "2", "3", "4");
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13","14");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11","12","13","14","15");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11","12","13","14","15","16","17");*/

int span = 0;
if (items.size() <= 3) {
span = 1;
} else if (items.size() <= 6) {
span = 2;
} else {
span = 3;
}

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

recyclerTest.setLayoutManager(gridLayoutRecyclerview);

SnapHelper snapHelper = new GravitySnapHelper(Gravity.START);
snapHelper.attachToRecyclerView(recyclerTest);

recyclerTest.setAdapter(new RecyclerViewAdapter(this, items));
}
}

最佳答案

Why is the recyclerview items populated in vertical fashion?

1 4
2 5
3 6

RecyclerView 适用于滚动的列表。如果您有水平布局,它将填充第一列,然后是第二列,然后是第三列,等等。毕竟,这就是我们期望列表的工作方式。这就是“编号已关闭”的原因。它从第一列开始,填满后继续下一列。

When my item count is 6 , how do i avoid the space between the rows?

我不知道你的设置,但我猜你的 recyclerviews 高度设置为 match_parent,所以它可能只是用完了所有可用的高度。 recyclerview 的 wrap_content 高度可能会有所帮助。

When my items are say 4 ,i want to show my items as

1 2 3
4

or

1 3 4
2

同样,参见上文,这不是 RecyclerView 的工作方式。它总是一一填充列,而不是从一行开始。列数为 2 的 4 个项目将始终首先填充第一列,如下所示。

1 3
2 4

RecyclerView 可能无法满足您的所有需求。您可以切换到具有3 列且少于 9 个项目的垂直 网格布局。这样它就不会水平滚动,甚至会像您描述的那样填满 View 。对于超过 9 个项目,您仍然会显示水平版本并让它滚动。

您实际上描述的是自定义布局:您想要一个以特定方式运行的 View 。您可以查看如何创建自己的 ViewGroup 并使用它来按您喜欢的方式布置所有 View 。除非您想显示长列表,否则这可能是一个不错的替代选择。

关于android - Recyclerview 水平跨度和间距问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46206283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com