问题
I am trying to show exact (eg. 3 items) in RecyclerView. Our web application shows like this:
If I move items:
and release the mouse, it automatically comes to this:
In Android, I am showing images using RecyclerView:
How to show exactly 3 items in the visible area of RecyclerView? How to avoid to show "half" items? Is this possible?
RecyclerView:
<android.support.v7.widget.RecyclerView
android:layout_width="wrap_content"
android:layout_height="130dp"
android:id="@+id/rvProducts" />
One item in recycler view:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:padding="10dp"
android:id="@+id/ivProduct"
android:src="@drawable/noimage"/>
</LinearLayout>
Code:
LinearLayoutManager layoutManager
= new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
RecyclerView productImageList = (RecyclerView) view.findViewById(R.id.rvProducts);
productImageList.setLayoutManager(layoutManager);
GalleryRecyclerAdapter adapter = new GalleryRecyclerAdapter(images);
productImageList.setAdapter(adapter);
回答1:
One solution is to set width
of each child programmatically like.
view.getLayoutParams().width = getScreenWidth() / VIEWS_COUNT_TO_DISPLAY;
And the screen size like this:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics).widthPixels;
回答2:
I have done the above task as following approach, please refers the following code
On my onCreateViewHolder()
method of my RecycleView Adapter
, i find out the width of the screen and than divided into 3 sections.Please check it once.
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.MY_ITEM_TO_INFALTE, parent, false);
itemView.getLayoutParams().width = (int) (getScreenWidth() / NUMBERS_OF_ITEM_TO_DISPLAY); /// THIS LINE WILL DIVIDE OUR VIEW INTO NUMBERS OF PARTS
return new MyCreationItemAdapter.MyViewHolder(itemView);
}
From above code getScreenWidth()
method which we use on above is as follow,please check it.
public int getScreenWidth() {
WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
return size.x;
}
回答3:
In a general way to achieve this there is no straight forward property that recycler view comes with.
The way this is achievable is by sending in the parent width to the adapter..
In a suedo way..
Parent width = parent container width;
InitialiseRecyclerAdapter(parent width) {
on create view holder {
Set the width of ur item layout with a width that divides ur parent width in equal parts;
}
}
回答4:
This solution worked for me:
private lateinit var productImageList: RecyclerView
override fun onAttachedToRecyclerView(recyclerView: RecyclerView)
{
super.onAttachedToRecyclerView(recyclerView)
productImageList = recyclerView
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
val viewHolder = LayoutInflater.from(parent.context).inflate(R.layout.ITEM_TO_INFALTE, parent, false)
viewHolder.layoutParams.width = productImageList.measuredWidth / NUMBERS_OF_ITEM_TO_DISPLAY
return ProductViewHolder(viewHolder)
}
Code is in kotlin, hope it will help you.
来源:https://stackoverflow.com/questions/35153618/how-to-show-exact-number-of-items-in-recyclerview