如何在垂直recyclerview上添加水平滚动?

时间:2019-02-13 11:50:17

标签: java android android-recyclerview

所以我有一个这样的recyclerview:

enter image description here

如您所见,屏幕宽度不足以很好地显示所有文本,因此我需要添加水平滚动,以便用户可以同时水平和垂直滚动,我该怎么做?

6 个答案:

答案 0 :(得分:0)

您可以在行布局中使用它:

query()

答案 1 :(得分:0)

  1. 您可以在TextView中添加android:scrollHorizo​​ntally =“ true”
  2. 如果列表项中有多个视图,则可以使用Horizo​​ntalScrollView

答案 2 :(得分:0)

使用Horizo​​ntalScrollView和LinearLayout作为子级。将其“方向”设置为水平,然后向其中添加动态视图。

while

答案 3 :(得分:0)

将垂直RecyclerView放在HorizontalScrollView内,如下所示。

<HorizontalScrollView
    android:fillViewport="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/tasks_recycler_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>

</HorizontalScrollView>

另外,RecyclerView的项目视图的根元素必须具有宽度wrap_content而不是match_parent,通过将其宽度设置为wrap_content,它可以扩展其父级的宽度,在这种情况下为RecyclerView

现在,在项目视图中,给内部视图赋予wrap_content或固定宽度,在您的情况下,内部视图即显示“否”,“ Wonum”,“项目编号”,“数量”和“ UOM”的视图”。通过提供固定的内部视图或wrap_content选项,它们将自动扩展或根据给定的宽度扩展,从而扩展其父级。

答案 4 :(得分:0)

尝试一下

     val linearLayoutManager = LinearLayoutManager(this)
                linearLayoutManager.orientation = LinearLayoutManager.HORIZONTAL
                selected_recycler_view.layoutManager = linearLayoutManager

adapter = TAdapter(this, existing.selectedArrayList)

答案 5 :(得分:0)

使用此布局管理器允许在垂直 LinearLayoutManager 中水平滚动长项目。

import android.content.Context;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class FullScrollLayoutManager extends LinearLayoutManager {
    private int offset;
    private int maxOffset;

    public FullScrollLayoutManager(Context context) {
        super(context);
    }

    @Override
    public void onLayoutCompleted(RecyclerView.State state) {
        super.onLayoutCompleted(state);
        int n = getChildCount();
        offset = 0;
        maxOffset = 0;
        int ownWidth = getWidth();
        for(int i=0; i<n; ++i) {
            View view = getChildAt(i);
            int x = view.getRight();
            if(x>ownWidth) maxOffset = Math.max(maxOffset,x-ownWidth);
        }
    }

    @Override
    public boolean canScrollHorizontally() {
        return true;
    }

    @Override
    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
        if(dx<0) {
            if(-dx>offset) dx = -offset;
        }
        else
        if(dx>0) {
            if(dx+offset>maxOffset) dx = maxOffset-offset;
        }
        offsetChildrenHorizontal(-dx);
        offset += dx;
        return dx;
    }

}