Mon article de recyclage qui se gonfle dans onCreateViewHolder
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center"
Android:orientation="vertical"
Android:padding="16dp">
<ImageView
Android:id="@+id/gridListImageView"
Android:layout_width="96dp"
Android:layout_height="96dp"
Android:src="@drawable/a" />
<TextView
Android:id="@+id/gridListView_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="20dp"
Android:text="Large Text"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
Je veux afficher quelque chose comme ceci Qui a une rangée de la moitié de la hauteur du recycleur Voir? Et ajouter du rembourrage au reste de l'espace? Puis-je faire cela par GridLayoutManager?
Et voici mon GridLayoutManager
GridLayoutManager glm = new GridLayoutManager(getActivity(), 2);
recyclerView.setLayoutManager(glm);
Lorsque vous gonflez la présentation de vos vues dans l'adaptateur, vous pouvez définir leur hauteur par programmation. Pour évaluer la hauteur appropriée à utiliser, vous pouvez vous fier au ViewGroup parent (c'est-à-dire le RecyclerView lui-même). Voici un exemple:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = mLayoutInflater.inflate(R.layout.view_item, parent, false);
// work here if you need to control height of your items
// keep in mind that parent is RecyclerView in this case
int height = parent.getMeasuredHeight() / 4;
itemView.setMinimumHeight(height);
return new ItemViewHolder(itemView);
}
J'espère que cela pourrait aider.
À compter de la bibliothèque de support 25.1.0, LA RÉPONSE CI-DESSUS NE FONCTIONNE PAS. Je suggère ci-dessous des modifications:
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
GridLayoutManager.LayoutParams lp = (GridLayoutManager.LayoutParams) v.getLayoutParams();
lp.height = parent.getMeasuredHeight() / 4;
v.setLayoutParams(lp);
return new ViewHolder(v);
}
Vous n'avez pas besoin de définir la hauteur d'un élément. Le problème ici est que l’image essaie de remplir tout l’espace. Ajoutez simplement Android:adjustViewBounds="true"
sur votre ImageView et il ne sera pas ajouter des espaces
v.getLayoutParams().width = parent.getMeasuredWidth() / 2;
v.getLayoutParams().height = parent.getMeasuredWidth() / 2;
parfois, obtenir la taille de la vue de gonflage dans le retour de l’adaptateur égal à 0 ou négatif. Une autre approche consiste à obtenir la taille requise de l’adaptateur, à le manipuler et à le visualiser. dans mon cas, un autre problème était la taille sans effet. donc je règle la taille en utilisant le paramètre de mise en page
voici mon adaptateur en activité:
Display display = MainActivity.this.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int y = size.y;
y=(int)y/2;
GridLayoutManager linearLayoutManager = new GridLayoutManager(MainActivity.this,2);
recyclerView.setLayoutManager(linearLayoutManager);
NewOrderAdapter newOrderAdapter=new NewOrderAdapter(MainActivity.this,arrayListname,arrayListimage,y);
recyclerView.setAdapter(newOrderAdapter);
et je règle la taille de la vue comme ceci:
@Override
public myviewholder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = inflator.inflate(R.layout.new_order_row, viewGroup, false);
GridLayoutManager.LayoutParams params = (GridLayoutManager.LayoutParams) view.getLayoutParams();
params.height = ysize;
view.setLayoutParams(params);
myviewholder holder = new myviewholder(view);
return holder;
}
et n'oubliez pas de définir une hauteur de mise en page dans votre mise en page pour l'initialisation
Sur un niveau récent d'API actuellement 25, la hauteur du recycleur dans onCreateViewHolder est toujours vide. Cet extrait sert à définir la hauteur après l'appel de la vue recycleur onMeasure et à définir la hauteur correcte pour la vue liste gonflée.
@Override
public DataBindingViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
// You may inflate your view here.
parent.post(new Runnable() {
@Override
public void run() {
int height = parent.getMeasuredHeight() / rows;
View view = holder.getBinding().getRoot();
view.getLayoutParams().height = height;
}
});
return holder;
}
Ceci est mon code pour ajuster la hauteur de l'élément de la vue de recyclage en fonction de l'aspect réel requis.
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.adapter_offers, parent, false);
int width = parent.getMeasuredWidth();
float height = (float) width / Config.ASPECT_RATIO;//(Width/Height)
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) itemView.getLayoutParams();
params.height = Math.round(height);
itemView.setLayoutParams(params);
return new MyViewHolder(itemView);
}