0

J'ai réduit ma vue de l'article au strict minimum, mais j'ai toujours une mise en page avec beaucoup de rembourrage et ce n'est pas ce que j'attendais.RecyclerView: mise en page bizarre

Voir la photo:

une cellule dans le moteur de rendu:

one cell

La vue réelle:

enter image description here

Quelqu'un peut-il expliquer comment je peux supprimer ces espaces blancs en haut et en bas de l'image?

Voici le code (très simple):

Une cellule

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

      <ImageView 
       android:id="@+id/categoryPhoto" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/bg_alles_fur_kinder" /> 

      <TextView 
       android:id="@+id/categoryName" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Children" 
       android:textColor="#fff" 
       android:textAllCaps="true" 
       android:layout_alignLeft="@id/categoryPhoto" 
       android:layout_alignBottom="@id/categoryPhoto" 
       android:textSize="22sp" /> 

</RelativeLayout> 

Le RecyclerView personnalisé

/** 
* Created by laurentmeyer on 21/08/16. 
*/ 
public class CategoryRecyclerView extends RecyclerView { 

    public CategoryRecyclerView(Context context, @Nullable AttributeSet attrs) { 
     super(context, attrs); 
     setHasFixedSize(true); 
     ArrayList<Category> categories = new ArrayList<>(); 
     categories.add(new Category(Category.CategoryType.CHILDREN)); 
     categories.add(new Category(Category.CategoryType.DECORATION)); 
     categories.add(new Category(Category.CategoryType.FASHION)); 
     categories.add(new Category(Category.CategoryType.FURNITURE)); 
     categories.add(new Category(Category.CategoryType.HOUSE)); 
     categories.add(new Category(Category.CategoryType.LITTERATURE)); 
     categories.add(new Category(Category.CategoryType.MULTIMEDIA)); 
     categories.add(new Category(Category.CategoryType.OTHER)); 
     CategoryRecyclerViewAdapter adapter = new CategoryRecyclerViewAdapter(categories); 
     setAdapter(adapter); 
     GridLayoutManager glm = new GridLayoutManager(getContext(), 2); 
     glm.setAutoMeasureEnabled(true); 
     setLayoutManager(glm); 
    } 

    public class CategoryRecyclerViewAdapter extends RecyclerView.Adapter<CategoryRecyclerViewAdapter.CategoryViewHolder> { 

     List<Category> categories; 

     CategoryRecyclerViewAdapter(List<Category> categories) { 
      this.categories = categories; 
     } 


     @Override 
     public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_card, parent, false); 
      CategoryViewHolder cvh = new CategoryViewHolder(v); 
      return cvh; 
     } 

     @Override 
     public void onBindViewHolder(CategoryViewHolder holder, int position) { 
      holder.categoryName.setText(categories.get(position).getType().getName()); 
      holder.photo.setImageResource(categories.get(position).getType().imageId); 
     } 

     @Override 
     public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
      super.onAttachedToRecyclerView(recyclerView); 
     } 


     @Override 
     public int getItemCount() { 
      return categories.size(); 
     } 

     public class CategoryViewHolder extends RecyclerView.ViewHolder { 
      TextView categoryName; 
      ImageView photo; 


      public CategoryViewHolder(View itemView) { 
       super(itemView); 
       categoryName = (TextView) itemView.findViewById(R.id.categoryName); 
       photo = (ImageView) itemView.findViewById(R.id.categoryPhoto); 
      } 
     } 
    } 


} 

EDIT: L'utilisation d'un LinearLayoutManager fonctionne parfaitement.

+0

Avez-vous vraiment besoin d'un nid RelativeLayout dans un LinearLayout? Les dispositions imbriquées sont mauvaises pour les performances. –

+0

Ok ouais, je peux enlever ça, il y avait un cardview avant, mais je l'ai supprimé pour le debug. Thx –

+1

Modifié, thx –

Répondre

2

JE LE AI! Si vous utilisez: android:adjustViewBounds="true" dans le ImageView cela fonctionne!

Crédits à: AppGuruz

+0

Génial. Maintenant, s'il vous plaît acceptez votre propre réponse, afin de supprimer votre message de la file d'attente de questions sans réponse. –