Android 使用 RecyclerView 创建动态列表

2022-11-05  本文已影响0人  小城哇哇

关于 RecyclerView 中的列表布局问题

RecyclerView 中的列表项由 LayoutManager 类负责排列。RecyclerView 库提供了三种布局管理器,用于处理最常见的布局情况:

LinearLayoutManager 线性布局:将各个项排列在一维列表中。

  /**
  * LinearLayoutManager线性布局的构造函数原型
  * @param context       当前的上下文对象, 用于获取资源.
  * @param orientation   布局方向. 设置成 RecyclerView.VERTICAL 或 RecyclerView.HORIZONTAL.
  * @param reverseLayout 当设置成 true 时, 布局会翻转, 从尾部开始头部结束.
  */
  public LinearLayoutManager(Context context, @RecyclerView.Orientation int orientation,boolean reverseLayout) {
      setOrientation(orientation);
      setReverseLayout(reverseLayout);
  }
  // LinearLayoutManager 线性布局的简单使用
  private LinearLayoutManager getLinearLayoutManager() {
      //设置线性布局
      LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false) {
          //禁止竖向滑动 RecyclerView 为垂直状态(VERTICAL)
          @Override
          public boolean canScrollVertically() {
              return false;
          }
          //禁止横向滑动 RecyclerView 为水平状态(HORIZONTAL) canScrollHorizontally
      };
      return layoutManager;
  }

GridLayoutManager 网格布局:将所有项排列在二维网格中:

如果网格垂直排列,GridLayoutManager 会尽量使每行中所有元素的宽度和高度相同,但不同的行可以有不同的高度。
如果网格水平排列,GridLayoutManager 会尽量使每列中所有元素的宽度和高度相同,但不同的列可以有不同的宽度。

/**
* GridLayoutManager 网格布局的构造函数原型 (其中一个)
* @param context      当前的上下文对象, 用于获取资源.
* @param spanCount    网格中的列数
*/
public GridLayoutManager(Context context, int spanCount) {
    super(context);
    setSpanCount(spanCount);
}
/**
* GridLayoutManager 网格布局的构造函数原型 (其中一个)
* @param context       当前的上下文对象, 用于获取资源.
* @param spanCount     网格中的列或行数  
* @param orientation   布局方向. 设置成 RecyclerView.VERTICAL 或 RecyclerView.HORIZONTAL.
* @param reverseLayout 当设置成 true 时, 布局会翻转, 从尾部开始头部结束.
*/
public GridLayoutManager(Context context, int spanCount, @RecyclerView.Orientation int orientation, boolean reverseLayout) {
    super(context, orientation, reverseLayout);
    setSpanCount(spanCount);
}
//简单用法
  private GridLayoutManager getGridLayoutManager() {
      //设置线性布局//网格布局GridLayoutManager //瀑布流网格布局 StaggeredGridLayoutManager
      GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2,RecyclerView.VERTICAL,false) {
          //禁止竖向滑动 RecyclerView 为垂直状态(VERTICAL)
          @Override
          public boolean canScrollVertically() {
              return false;
          }
          //禁止横向滑动 RecyclerView 为水平状态(HORIZONTAL) canScrollHorizontally
      };
      return gridLayoutManager;
  }

StaggeredGridLayoutManager 瀑布流网格布局

与 GridLayoutManager 类似,但不要求同一行中的列表项具有相同的高度(垂直网格有此要求)或同一列中的列表项具有相同的宽度(水平网格有此要求)。其结果是,同一行或同一列中的列表项可能会错落不齐。

/**
* StaggeredGridLayoutManager 瀑布流网格布局的构造函数原型 (其中一个)
* @param spanCount    如果方向是垂直的,则spanCount是列数。 如果方向是水平的,则spanCount是行数。
* @param orientation  布局方向. 设置成 StaggeredGridLayoutManager.VERTICAL 或 StaggeredGridLayoutManager.HORIZONTAL.
*/
public StaggeredGridLayoutManager(int spanCount, int orientation) {
    mOrientation = orientation;
    setSpanCount(spanCount);
    mLayoutState = new LayoutState();
    createOrientationHelpers();
}
// 瀑布流网格布局 布局简单用法
  private StaggeredGridLayoutManager getStaggeredGridLayoutManager() {
      StaggeredGridLayoutManager gridLayoutManager = new  StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL) {
          @Override
          public boolean canScrollVertically() { //禁止垂直滚动
              return false;
          }
          //@Override
          //public boolean canScrollHorizontally() {return false;}//禁止水平滚动
      };
      return gridLayoutManager;
  }

来自:https://juejin.cn/post/7159197356758564894

上一篇 下一篇

猜你喜欢

热点阅读