3

RecyclerView と GridLayoutManager があります。列の幅は同じですが、80dp幅のある最初の列が必要です。これは可能ですか?

例: RecyclerView 幅 5 列

final columnsCount = 5;

recyclerView.width = 500dp

column0.width = 80dp

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

ここに画像の説明を入力

何かアドバイス?

編集:コード

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

2 に答える 2

0

アダプターでそれを行うことができます。

アイテムの位置が 0 に等しいかどうかを確認し、0 の場合はレイアウトを 80 dp 幅で膨張させます。

于 2016-05-09T14:39:50.090 に答える
0

で使用する 80 dp 幅の 2 番目のレイアウトを作成RecyclerView.Adapterし、onCreateViewHolder()メソッドでアイテムの位置が 0 に等しいかどうかを確認し、0 の場合はレイアウトを 80 dp 幅で膨張させ、そうでない場合は通常のレイアウトを膨張させます。そのためには、独自の 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);
}
于 2016-05-09T14:43:13.973 に答える