滚动时扩展项目之间的 RecyclerView 空间
Posted
技术标签:
【中文标题】滚动时扩展项目之间的 RecyclerView 空间【英文标题】:RecyclerView space between items expanding when scrolling 【发布时间】:2016-11-08 12:10:07 【问题描述】:我刚刚为我的android Application
完成了我的RecyclerView
,但是在测试它时,我发现了一个我不明白的奇怪错误。当活动启动时,Recycler
视图中的项目以正确的距离很好地定位在RecyclerView
中。但是,一旦我开始滚动,它们就会彼此分开,直到一次只能看到一个项目,并且您必须将 distance almost equivalent
滚动到屏幕上才能看到下一个项目。
这是错误的样子:
在活动午餐上滚动之前
滚动回收视图后
如果您知道可能导致此问题的原因,我们将不胜感激。
这是活动中的 RecyclerView 代码:
private ArrayList<String> imagesUrlListThumb, imagesUrlListFull = new ArrayList<String>();
private RecyclerAdapter recyclerAdapter;
private String urlRecyclerThumb = "";
private RecyclerView recyclerView;
private ImageView imgCurRecyclerView;
imagesUrlListThumb = produit.getImgUrlThumbMul();
recyclerAdapter = new RecyclerAdapter(getApplicationContext(), imagesUrlListThumb);
recyclerView = (RecyclerView) findViewById(R.id.content_product_detail_recycer_view);
RecyclerView.LayoutManager recyclerLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(recyclerLayoutManager);
recyclerView.setAdapter(recyclerAdapter);
urlRecyclerThumb = imagesUrlListThumb.get(0);
RecyclerItemClickSupport.addTo(recyclerView).setOnItemClickListener(new RecyclerItemClickSupport.OnItemClickListener()
@Override
public void onItemClicked(RecyclerView rv, int pos, View view)
urlRecyclerThumb = imagesUrlListThumb.get(pos);
Picasso.with(getApplicationContext()).load(urlRecyclerThumb).fit().into(imgCurRecyclerView);
);
回收器适配器:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>
private List<String> urlThumbImg;
private Context context;
public RecyclerAdapter(Context ctx, List<String> urls)
this.urlThumbImg = urls;
this.context = ctx;
@Override
public RecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_slideshow, parent, false);
return new MyViewHolder(itemView);
@Override
public void onBindViewHolder(RecyclerAdapter.MyViewHolder holder, int position)
String current = urlThumbImg.get(position);
Picasso.with(context).load(current).fit().into(holder.myImgView);
@Override
public int getItemCount()
return urlThumbImg.size();
public class MyViewHolder extends RecyclerView.ViewHolder
public ImageView myImgView;
public MyViewHolder(View view)
super(view);
myImgView = (ImageView) view.findViewById(R.id.imageView_slide);
这是我关于回收站视图的 xml 布局:
<!-- RECYCLER VIEW -->
<LinearLayout
android:layout_
android:layout_
android:layout_marginTop="15dp"
android:orientation="vertical">
<ImageView
android:id="@+id/content_product_detail_recycer_view_cur_image"
android:layout_
android:layout_
android:layout_gravity="center"
android:background="@android:color/black" />
<android.support.v7.widget.RecyclerView
android:id="@+id/content_product_detail_recycer_view"
android:layout_
android:layout_
android:layout_gravity="center"
android:layout_margin="5dp"
android:background="@android:color/darker_gray">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
recyclerview 中项目的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<ImageView
android:id="@+id/imageView_slide"
android:layout_
android:layout_
android:layout_margin="5dp"
android:background="@android:color/darker_gray" />
【问题讨论】:
你的回收站查看代码? 为您在recyclerview中的项目提供布局和recyclerview代码 @AhmadAlsanie 我已经添加了我的问题的代码 @Kushan 我已经添加了我的问题的代码 @Adamouization RecyclerView buddy 中项目的布局。 【参考方案1】:提供您的 Layout 和 RecyclerView 代码以帮助调试而不是猜测。
好的,问题来了:
在 2.3.0 版中,LayoutManager API 有了一个令人兴奋的新功能:自动测量! 这允许 RecyclerView 根据其内容的大小来调整自己的大小。这意味着以前不可用的场景,例如将 WRAP_CONTENT 用于 RecyclerView 的维度,现在是可能的。 您会发现所有内置的 LayoutManagers 现在都支持自动测量。
由于此更改,请务必仔细检查项目视图的布局参数:以前忽略的布局参数(例如滚动方向中的 MATCH_PARENT)现在将得到完全尊重。
基本上你需要去掉LinearLayout
<ImageView
android:id="@+id/imageView_slide"
android:layout_
android:layout_
android:layout_margin="5dp"
android:background="@android:color/darker_gray" />
LinearLayout 宽度中的 match_parent 导致每个项目用一个图像和剩余空间来适应整个屏幕。
如果您坚持使用LinearLayout,请将宽度和高度都设置为wrap_content
【讨论】:
src: ***.com/questions/35728179/… 感谢@Ahmad Alsanie :) 忘记添加报价来源 :)以上是关于滚动时扩展项目之间的 RecyclerView 空间的主要内容,如果未能解决你的问题,请参考以下文章
向下滚动然后再次向上滚动后,recyclerview 项目之间出现间隙。请看详情
为啥直到在选项卡之间滚动才会显示 recyclerview 项目?