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,如果是,则以 80dp 宽度膨胀布局。

于 2016-05-09T14:39:50.090 回答
0

创建第二个宽度为 80dp 的布局以在您RecyclerView.AdapteronCreateViewHolder(). 您应该创建自己的 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 回答