2015-05-15 10 views
5

Mam poziomą recyclerview:Zobacz w RecyclerView nie odpowiada szerokości nadrzędnego

<android.support.v7.widget.RecyclerView 
     android:id="@+id/rvRecommendedVendors" 
     android:scrollbars="none" 
     android:layout_width="match_parent" 
     android:layout_height="225dp" 
     android:visibility="visible" 
     android:layout_below="@+id/llRecommendedVendors" 
     android:overScrollMode="never" 
     android:background="@color/dark_blue" 
     /> 

Ma element:

<?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"> 

    <ImageButton 
     android:layout_width="match_parent" 
     android:layout_height="225dp" 
     android:id="@+id/ibRecommendedCoverPhoto" 
     android:src="@drawable/sample_cover_image" 
     android:background="@android:color/darker_gray" 
     android:scaleType="centerCrop"/> 
</LinearLayout> 

szerokości obu Controls są ustawione na match_parent jednak imagebutton nie "dopasuje" szerokości swojego rodzica.

Zalogowałem szerokość:

recyclerView Wzrost: 338
recyclerView Szerokość: 480

to ze sposobu recyclerview onCreateViewHolder:

@Override 
    public RecommendedVendorsViewHolder onCreateViewHolder(ViewGroup vg, int viewType) { 
    View v = LayoutInflater.from(vg.getContext()).inflate(R.layout.item_recommended_list, vg, false); 

Zalogowałem widok na wysokość i szerokość:

View v Wysokość: 338
View v Szerokość: 327

Próbowałem ustawienie szerokości programowo:

@Override 
    public RecommendedVendorsViewHolder onCreateViewHolder(ViewGroup vg, int viewType) { 
     View v = LayoutInflater.from(vg.getContext()).inflate(R.layout.item_recommended_list, vg, false); 
     RecyclerView.LayoutParams params= (RecyclerView.LayoutParams)v.getLayoutParams(); 
     params.width=480; 
     v.setLayoutParams(params); 

     return vh; 
    } 

View v Wysokość: 338
View v Szerokość: 480

Działa, ale nie chcę o zmieniaj rozmiar widoku za każdym razem.

+1

Czy rozwiązałeś ten problem? Napotykam coś podobnego do tego, ale nie wiem, jak to rozwiązać :( – Gintama

+1

Czy znalazłeś rozwiązanie tego problemu? – prasunnair

+1

Jeszcze nie przeszedłem na ten problem Pamiętam, że korzystam z podglądacza. ludzie będą zainteresowani odpowiedzią na nie –

Odpowiedz

-2

myślę, że problem jest z

vg.getContext()

Let zmiany ApplicationContext lub przekazać kontekst CustomAdapter

+1

Próbowałem go, to nie działa.Także w dokumentacji Android pokazuje, że należy użyć vg.getContext. Sprawdź to: https://developer.android.com/training/material/ lists-cards.html Dzięki, w każdym razie! –

2

RecyclerView jest bardzo słaba, jeśli chodzi o prawidłowe pozycjonowanie to i/lub jego widoki podrzędne. Spróbuj

@Override 
public ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { 
    final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    final View v = inflater.inflate(R.layout.item, parent, false); 

    // match_parent won't work for RecyclerView (sigh) 
    final ViewGroup.LayoutParams lp = v.getLayoutParams(); 
    lp.width = parent.getWidth(); 
    lp.height = parent.getHeight(); 
    v.setLayoutParams(lp); 

    return new ViewHolder(v); 
} 

które w zasadzie zastępuje match_parent zarówno wysokość & szerokości w świetle dziecięcej. W twoim przypadku ustawisz wtedy tylko szerokość.

Powiązane problemy