android - RecyclerView 网格布局管理器 : change column width

标签 android android-recyclerview gridlayoutmanager

我有一个 RecyclerView 和一个 GridLayoutManager。 列宽相等,但我希望第一列的宽度为 80dp。 这可能吗?

Example: RecyclerView width 5 columns

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,如果是,则将布局扩展为 80dp 宽度。

关于android - RecyclerView 网格布局管理器 : change column width,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118438/

相关文章:

java - 我的对象应该保存对象还是对象 ID?

android - 在 Intent 中设置后 Bundle 为空

android - RecyclerView with GridLayoutManager in RecyclerView with LinearLayoutManager

android - 在 RecyclerView 适配器中实现多个 ViewHolder 类型

android - 在 Recycler GridLayoutManager 中的 3 行和 4 行项目之间提供更多间距

android - 捏合和缩放 RecyclerView 布局以设置动画并更改布局管理器跨度计数

java - 如何使用键和值创建json对象,其中值是数组

android - 上下文 this 和 getContext() 的区别

Android:如何在 RecyclerView 列表中维护 CardView 的 View ?

java - 回收者 View 不断刷新