• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 从头开始学RecyclerView(六)LayoutManager

从头开始学RecyclerView(六)LayoutManager

作者:打鱼还是晒网 —— stone 字体:[增加 减小] 来源:互联网 时间:2017-07-23

打鱼还是晒网 —— stone通过本文主要向大家介绍了recyclerview使用,布局管理器等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在前面的文章中,每个示例,都使用了LayoutManager,毕竟它是RecyclerView不可缺少的一部分。

LayoutManager,顾名思义,就是『布局管理器』。

使用如下代码,设置RecyclerView的LayoutManager:

mRecyclerView.setLayoutManager(layoutManager);

 

已提供的LayoutManager

android.support.v7.widget.LinearLayoutManager
android.support.v7.widget.GridLayoutManager
android.support.v7.widget.StaggeredGridLayoutManager


LinearLayoutManager

线性 水平或垂直 布局

构造函数如下:

public LinearLayoutManager(Context context) {
    this(context, VERTICAL, false);
}

public LinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
    setOrientation(orientation);
    setReverseLayout(reverseLayout);
    setAutoMeasureEnabled(true);
}

public LinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    ...
}

第1个中,内部使用了第2个。第3个是xml中配置时使用的。实现跟第2个的实现类似。这里就解释下第2个构造方法中的参数意义:
orientation —— 取值 LinearLayoutManager.HORIZONTAL,表示水平方向;取值 LinearLayoutManager.VERTICAL,表示垂直方向
reverseLayout —— 是否需要布局反转。true,表示需要:若是方向为HORIZONTAL,则内容会从右到左显示,滚动方向也是;同样,方向为VERTICAL时,则内容会从下向上显示,滚动方向也是

 

GridLayoutManager

网格布局。

构造函数如下:

public GridLayoutManager(Context context, int spanCount) {
    super(context);
    setSpanCount(spanCount);
}

public GridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
    super(context, orientation, reverseLayout);
    setSpanCount(spanCount);
}

public GridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {…} //xml

由于GridLayoutManager 继承了 LinearLayoutManager,所以构建函数中的参数意思差不多。
主要说下参数 spanCount 意义:在方向为HORIZONTAL时,spanCount就表示有几行;在方向为VERTICAL时,spanCount就表示有几列

StaggeredGridLayoutManager

交错的网格布局。

构造函数如下:

public StaggeredGridLayoutManager(int spanCount, int orientation){
    mOrientation = orientation;
    setSpanCount(spanCount);
    setAutoMeasureEnabled(mGapStrategy != GAP_HANDLING_NONE);
    mLayoutState = new LayoutState();
    createOrientationHelpers();
}
public StaggeredGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {…} //xml

StaggeredGridLayoutManager 继承了 GridLayoutManager。参数意义与GridLayoutManager类似。

要实现交错式,除了设定RV的layoutManger为StaggeredGridLayoutManager外,还要设置item的宽或高的尺寸。
当方向为HORIZONTAL时,spanCount表示总的行数,这时为item设置不一样的宽度,即有横向交错的感觉。
当方向为HORIZONTAL时,spanCount表示总的列数,这时为item设置不一样的高度,即有纵向交错的感觉。

如果只是对item设置LayoutParams,那么还需要相应的设置item的内容view的LayoutParams。所以如果可以,直接改变item内容view的LayoutParams即可

关于改变宽或高的示例代码:

@Override
public void bindCustomViewHolder(BaseHolder holder, int position) {
    holder.itemView.setFocusable(true);//加了这句,电视上就能滚动了

    TextView tvTitle = holder.getView(R.id.tv_title);
    tvTitle.setText(getItem(position));

    View vImg = holder.getView(R.id.v_img);
    vImg.setBackgroundColor(getColor());

    if (mIsStaggered) {
        float size = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());//100dip转px
        int w = mOrientation == LinearLayoutManager.HORIZONTAL ? (int)size : -1;
        int h = mOrientation == LinearLayoutManager.HORIZONTAL ? -1 : (int)size;
        if (mOrientation == LinearLayoutManager.HORIZONTAL) {
            w = (int) (size + Math.random() * size);
        } else {
            h = (int) (size + Math.random() * size);
        }
//                    holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(w, h));
        vImg.setLayoutParams(new RelativeLayout.LayoutParams(w, h));
    }
}

注:由于这里设置成宽高随机值,所以每次重新滑动到开始位置时,都会重新布局。如果给一个定长就不会了:
w = (int)size;
if (position % 2 == 1) {
w = w / 2;
}

示例详情:https://github.com/aa86799/RecyclerView/tree/recycler-restart/

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 从头开始学RecyclerView(六)LayoutManager
  • 安卓开发之RecyclerView,安卓recyclerview

相关文章

  • 2017-05-26H5调用Android播放视频,h5调用android
  • 2017-05-26JAVA Web day01--- Android小白的第一天学习笔记,day01---android
  • 2017-05-26认清Android Studio下的Gradle是什么
  • 2017-05-26Android捕获崩溃异常,Android捕获崩溃
  • 2017-05-26Android versionCode和versionName的区别,androidversioncode
  • 2017-05-26硅谷新闻9--图片三级缓存,
  • 2017-05-26android关于线程的那些事,android那些事
  • 2017-05-26第一节 搭建开发环境,第一节搭建开发
  • 2017-05-26Ubuntu Android Studio 无法通过起动器开启,android起动器
  • 2017-05-26谈谈Android中的Divider,AndroidDivider

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 二维码积分兑换商城,积分兑换商城
    • Android中Activity的四大启动模式实验简述,androidactivity
    • Glide中request的调用和管理
    • Android之文件数据存储,android数据存储
    • 用Anko和Kotlin实现Android上的对话框和警告提示(KAD 24),ankokotlin
    • Android 热修复使用Gradle Plugin1.5改造Nuwa插件
    • 2.5.6 ViewFlipper(翻转视图)的基本使用
    • Android开发免费类库和工具集合,android类库
    • 客户端和服务端如何使用Token和Session,tokensession
    • Android--Dialog对话框

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有