2015-05-15 91 views
5

我有一個水平recyclerview觀RecyclerView不匹配父寬度

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

它有一個項目:

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

兩個控件寬度設定然而match_parent,所述的ImageButton將不會「匹配」其父寬度。

我記錄寬度:

recyclerView高度:338
recyclerView寬度:480

這是從recyclerview方法onCreateViewHolder:

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

我記錄視圖的高度和寬度:

視圖V身高:338
視圖V寬度:327

我試圖以編程方式設置寬度:

@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; 
    } 

視圖V身高:338
視圖V寬度: 480

它的工作原理,但我不想噸o每次調整視圖的大小。

+1

你解決了這個問題嗎?我遇到類似這樣的東西,但不知道如何解決它:( – Gintama

+1

您是否找到了解決方案? – prasunnair

+1

我還沒有重新訪問這個問題,我記得使用viewpager。人們會有興趣回答它 –

回答

-2

我認爲這個問題是從

vg.getContext()

讓變化的applicationContext或通過上下文CustomAdapter

+1

我試過了,它不起作用。在android文檔中它也顯示你應該使用vg.getContext。檢查出來:https://developer.android.com/training/material/ lists-cards.html 謝謝,無論如何! –

2

RecyclerView是非常糟糕的,當談到正確定位它和/或其子女的意見。 嘗試

@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); 
} 

基本上替換match_parent爲子圖內既高度&寬度。 對於您的特殊情況,您只能設置寬度。