J'essaie de montrer l'exact (par exemple 3 éléments) dans RecyclerView. Notre application Web montre comme ceci:
Si je déplace des objets:
et relâchez la souris, il vient automatiquement à ceci:
Sous Android, je montre des images à l'aide de RecyclerView:
Comment afficher exactement 3 éléments dans la zone visible de RecyclerView? Comment éviter de montrer des "demi" articles? Est-ce possible?
RecyclerView:
<Android.support.v7.widget.RecyclerView
Android:layout_width="wrap_content"
Android:layout_height="130dp"
Android:id="@+id/rvProducts" />
Un élément dans la vue recycleur:
<?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);
Une solution consiste à définir width
de chaque enfant comme par programme.
view.getLayoutParams().width = getScreenWidth() / VIEWS_COUNT_TO_DISPLAY;
Et la taille de l'écran comme ceci:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics).widthPixels;
J'ai effectué la tâche ci-dessus comme approche suivante, veuillez vous référer au code suivant
Sur mononCreateViewHolder()
méthode de monRecycleView Adapter
, je découvre la largeur de l'écran et que divisé en 3 sections.Veuillez vérifier une fois.
@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);
}
De ci-dessus codegetScreenWidth()
méthode que nous utilisons ci-dessus est comme suit, s'il vous plaît vérifier.
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;
}
De manière générale, il n’existe aucune propriété directe pour la vue recycleur.
Pour ce faire, vous devez envoyer la largeur du parent à l'adaptateur.
D'une manière suedo ..
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;
}
}
Cette solution a fonctionné pour moi:
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)
}
Le code est en kotlin, espérons qu'il vous aidera.