2016-05-09 86 views
1

私はRecyclerViewとGridLayoutManagerを持っています。 列幅は同じですが、最初の列の幅を80dp幅にします。 これは可能ですか?RecyclerView GridLayoutManager:列の幅を変更する

例:RecyclerView幅5列

final columnsCount = 5; 

recyclerView.width = 500dp 

column0.width = 80dp 

column 1-2-3-4 width = (recyclerview.width - column0.width)/columnsCount 

enter image description here

任意のアドバイスはありますか?

編集:コード

public class TestRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    private static final int VIEW_TYPE_START = 0; 
    private static final int VIEW_TYPE_PROGRESS_ITEM = 1; 
    private LayoutInflater inflater; 

    public TestRecyclerViewAdapter(Context context) { 
     this.inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (position == 0) { 
      return VIEW_TYPE_START; 
     } else { 
      return VIEW_TYPE_PROGRESS_ITEM; 
     } 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     final View view; 
     switch (viewType) { 
      case VIEW_TYPE_START: 
       view = this.inflater.inflate(R.layout.view_item_small, parent, false); 
       return new TestViewHolder(view); 
      case VIEW_TYPE_PROGRESS_ITEM: 
       view = this.inflater.inflate(R.layout.view_item, parent, false); 
       return new TestViewHolder(view); 
     } 
     return null; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    } 

    @Override 
    public int getItemCount() { 
     return 5; 
    } 
} 

view_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#0000FF" 
android:orientation="vertical"> 

view_item_small.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="80dp" 
android:layout_height="match_parent" 
android:background="#FF0000" 
android:orientation="vertical"> 

使用法:あなたがそれを行うことができ、あなたのアダプタで

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
    recyclerView.setAdapter(new TestRecyclerViewAdapter(this)); 
    recyclerView.setLayoutManager(new GridLayoutManager(this, 5)); 
} 
+0

をあなたが解決策を見つけましたか? –

答えて

0

アイテムの位置が0になっているかどうかを確認し、その場合は80dp幅でレイアウトを拡張します。

+0

これは質問の一部に答えますが( "これは可能ですか?")、実際には列幅を設定する方法、または回答を投稿する代わりにコメントを残す方法を説明する必要があります。 – 0X0nosugar

0

RecyclerView.Adapterで使用する80dpの幅を持つ2番目のレイアウトを作成し、次にonCreateViewHolder()メソッドでアイテムの位置が0であるかどうかをチェックし、80dp幅でレイアウトを拡張します。あなたがそうするように、独自のviewTypesを作成する必要があり に、あなたはそのためgetItemViewType(int position)メソッドをオーバーライドする必要がありますが、これは次のようになります。

private static final int VIEWTYPE_FIRST_ITEM = 1; 
private static final int VIEWTYPE_NORMAL_ITEM = 2; 

@Override 
public int getItemViewType(int position) { 
    if(position == 0) { 
     return VIEWTYPE_FIRST_ITEM; 
    } else { 
     return VIEWTYPE_NORMAL_ITEM; 
    } 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view; 
    if(viewType == VIEWTYPE_FIRST_ITEM) { 
     view = //TODO inflate layout with 80dp 
    } else { 
     view = //TODO inflate normal layout 
    } 
    return new ViewHolder(view); 
} 
+0

onBindViewHolder()ではなくonCreateViewHolder()でレイアウトを膨張させます。 –

+0

よろしくお願いいたします。私の間違いは、onCreateViewHolder()でなければなりません。答えを編集します。 – Jeffalee

関連する問題