回收站视图安排在水平滚动网格项目(Recycler view arrange items in a

2019-10-29 15:49发布

我已经设置的,我需要一个显示图标RecyclerView排列在网格中,使该网格滚动水平。 通常我会用GridLayoutManager这样的事情,但我的要求是阻止我这样做。 也就是说,不仅该项目已被安排在网格中,但他们也需要被添加到由列行和列不网格行(这是怎么GridLayoutManager做的话)。 因此,例如,如果网格是3x3的,我有4个项目,他们不应该采取的位置1,4,7和2位置,但1,2,3和4。

任何替代的RecyclerView它可以让我做这项工作也欢迎。

Answer 1:

您可以考虑使用HorizontalScrollView为每个行。 我给你一个简单的实现。

你需要有项目的布局是每一行中第一。 让我们有类似下面的布局。

让我们有这样的布局。 让我们把它命名item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some title" />
</LinearLayout>

现在,让我们来View的动态加载这个布局类。

public class CustomItemView extends LinearLayout {
    private Context context;
    private TextView mTextView;

    public CustomItemView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView(context);
    }

    public CustomItemView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    public CustomItemView(Context context) {
        super(context);
        initView(context);
    }

    private void initView(Context context) {
        this.context = context;

        View v = inflate(context, R.layout.item_layout, null);
        mTextView = (TextView) v.findViewById(R.id.title);

        addView(v);
    }

    public void setTitle(String title) {
        mTextView.setText(title);
    }
}

现在,让我们有一个类里面填充的意见HorizontalScrollView

public class MyHorizontalScrollView {
    HorizontalScrollView horizontalScrollView;
    LinearLayout linearLayout;
    Context context;

    public MyHorizontalScrollView(final Context context) {
        this.context = context;
        initScrollView();
    }

    private void initScrollView() {
        horizontalScrollView = new HorizontalScrollView(context);
        HorizontalScrollView.LayoutParams params = new HorizontalScrollView.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        horizontalScrollView.setLayoutParams(params);
        horizontalScrollView.setHorizontalScrollBarEnabled(false);

        linearLayout = new LinearLayout(context);
        LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        linearLayout.setLayoutParams(linearLayoutParams);

        horizontalScrollView.addView(linearLayout);
    }

    public LinearLayout addHorizontalScrollView(LinearLayout linearLayout) {
        linearLayout.addView(horizontalScrollView);
        return linearLayout;
    }

    public CustomItemView addNewEntryView(final String newTitle) {
        CustomItemView customItemView = new CustomItemView(context);
        customItemView.setTitle(newTitle);
        linearLayout.addView(customItemView);

        return customItemView;
    }
}

现在得到LinearLayout作为滚动视图架,并添加意见,以根据各行中要添加的项目。

在你的活动布局Activity

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:fillViewport="true">

    <LinearLayout
        android:id="@+id/scrollViewHolder"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />
</ScrollView>

现在,只需添加您HorizontalRecyclerView这个LinearLayout通过列表循环,三次在同一时间。

private LinearLayout mScrollViewHolder;
mScrollViewHolder = (LinearLayout) v.findViewById(R.id.scrollViewHolder);

MyHorizontalScrollView myHorizontalScrollView = new MyHorizontalScrollView(this.getContext());
myHorizontalScrollView.addHorizontalScrollView(mScrollViewHolder);
myHorizontalScrollView.addNewEntryView("Something");


文章来源: Recycler view arrange items in a grid that scrolls horizontally