RecyclerView高度随Item自适应
转载请注明出处:http://write.blog.csdn.net/postedit/40425231
编写RecyclerView.ItemDecoration时,在onDraw方法中,Drawable的高度等于RecyclerView的高度减去RecyclerView的上下padding。
@Overridepublic void onDraw(Canvas c, RecyclerView parent, State state) {int top = parent.getPaddingTop();int bottom = parent.getHeight() - parent.getPaddingBottom();int childCount = parent.getChildCount();for(int i=0;i < childCount;i++){View child = parent.getChildAt(i);RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)child.getLayoutParams();int left = child.getRight() + layoutParams.rightMargin;int right = left + mDivider.getIntrinsicWidth();mDivider.setBounds(left, top, right, bottom);mDivider.draw(c);}}
但运行后的显示效果却和我的预期相差很大
可以看到,ItemDecoration高度竟然全屏了,然后检查xml布局文件:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.xmy.recylerviewdemo.MainActivity" ><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="wrap_content"android:layout_height="wrap_content"/></RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:padding="10.0dip"android:orientation="vertical" ><ImageView android:id="@+id/item_iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="center"android:src="@drawable/img"android:adjustViewBounds="true"/><TextViewandroid:id="@+id/item_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>
xml布局文件中RecyclerView和Item的高度都设定的是wrap_content,那说好的自适应于item高度呢?查看Android文档,没发现有关RecyclerView高度相关说明,看来只能自己动手丰衣足食了。
根据Android-RecylerView初识里提到的,RecyclerView并不负责Item的显示工作,而Adapter负责的是数据仓库和Item的视图,所以最终把目标锁定到RecyclerView.LayoutManager上。于是尝试继承LinearLayoutManager,发现果然有onMeasure方法:
public void onMeasure(Recycler recycler, State state, int widthSpec,int heightSpec)
在onMeasure中可以获得RecyclerView.Recycler。Recycler负责管理Item视图的重复利用,所以我们可以通过Recycler获取一个Item视图的实例,然后像复写其他ViewGroup一样,使用measureChild获取子视图的高度后使用setMeasuredDimension设置RecyclerView同样的高度即可。
public class MyLayoutManager extends LinearLayoutManager {public MyLayoutManager(Context context) {super(context);// TODO Auto-generated constructor stub}@Overridepublic void onMeasure(Recycler recycler, State state, int widthSpec,int heightSpec) {View view = recycler.getViewForPosition(0);if(view != null){measureChild(view, widthSpec, heightSpec);int measuredWidth = MeasureSpec.getSize(widthSpec);int measuredHeight = view.getMeasuredHeight();setMeasuredDimension(measuredWidth, measuredHeight);}}
}
修改完之后的运行效果图:
最后奉上示例程序Github链接。
RecyclerView高度随Item自适应相关推荐
- 【Android 界面效果49】RecyclerView高度随Item自适应
编写RecyclerView.ItemDecoration时,在onDraw方法中,Drawable的高度等于RecyclerView的高度减去RecyclerView的上下padding. @Ove ...
- Android中当item数量超过一定大小RecyclerView高度固定
Android中当item数量超过一定大小时,将RecyclerView高度固定 方法1 直接通过LayoutParams来设定相应高度 ViewGroup.LayoutParams lp = rv. ...
- Android 入门第四讲03-列表RecyclerView(RecyclerView使用步骤(详),RecyclerView指定一行item的数目+指定一行item的数量,并且设置列表方向)
Android 入门第四讲03-列表RecyclerViewRecyclerView使用步骤(详),RecyclerView指定一行item的数目+指定一行item的数量,并且设置列表方向) 1.Re ...
- Android添加item动画,RecyclerView基础篇-Item添加动画
Android_Banner.jpg 简介 本节中我们介绍下给RecyclerView中的Item添加动画. 添加的动画,分为,在打开列表时有Item的展示动画,当滑动的时候没有动画 和打开列表滑动时 ...
- extjs的panel怎么自适应高度_Ext Js自适应高度
在利用ExtJs经常会遇到窗口放大样式改变,出现多个重复元素对象,面板不随着窗口变化等诸多问题,接下来我们就来一起看看这都是什么原因造成的. 我查询了一些资料,现在就来总结下.一共有三个方面我们先来看 ...
- 去掉RecyclerView的默认item动画
去掉RecyclerView的默认item动画 https://blog.csdn.net/CSDN_LQR/article/details/54766560 虽说RecyclerView的默认ite ...
- python文本框随窗体变化_Javascript 文本框textarea高度随内容自适应增长收缩
直接上代码: 方案一: 枫芸志 » 文本框textarea高度自适应增长/伸缩 晴枫制作 http://jb51.net [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行] 方案一在各浏 ...
- css设置元素 网页高度自适应,css高度自适应如何实现?css高度根据内容自适应的简单方法...
在进行网页开发时,可能会遇到这样的情况,网页中的内容会超出你原先设置的高度或者宽度,这时就需要实现高度自适应或者宽度自适应,下面这篇文章将给大家来介绍关于css高度自适应. PS:css宽度自适应的介 ...
- RecyclerView实现多种item布局
RecyclerView实现多种item布局 1.首先我们重写了getItemViewType这个方法,在这个方法中根据position对item对象做了一些判断, 2.具体为每种viewType引入 ...
最新文章
- SQL Server里Grouping Sets的威力
- Leetcode--149. 直线上最多的点数
- Android8.1 MTK平台 截屏功能分析
- Linux操作Oracle(8)——Oracle数据库迁移全纪录(1) — 表空间 用户 权限迁移
- 你的“数学潜意识”原来可以被唤醒
- 分布式存储引擎OceanBase,UpdateServer 实现机制——存储引擎
- 伟豪带你逛郑州商业技师学院⑨:电气工程系
- 系统规划与管理师——IT服务规划设计
- web前端数据可视化控件
- 句法分析(成分句法分析)(依存句法分析)
- 谷歌地图打不开怎么办?
- 手机网速正常电脑很慢_路由器WiFi速度正常,但电脑和手机上网速度慢怎么办?...
- 如何生成一个APP_ID
- 小米扫地机器人一直提示安装尘盒_忘记放回小米扫地机器人的尘盒 居然打开新彩蛋...
- Apollo搭建使用
- 软件智能:aaas系统中的数学程序与技术服务之1 序篇之 绪言
- VM 虚拟机网络配置
- 分享几个常用的地表温度数据集
- hdu5078 hdu5074 顺便写一写鞍山
- 中标麒麟卸载安装yum和python