【Android 界面效果49】RecyclerView高度随Item自适应
编写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链接。
转载于:https://www.cnblogs.com/dongdong230/p/4315630.html
【Android 界面效果49】RecyclerView高度随Item自适应相关推荐
- RecyclerView高度随Item自适应
转载请注明出处:http://write.blog.csdn.net/postedit/40425231 编写RecyclerView.ItemDecoration时,在onDraw方法中,Drawa ...
- 【Android 界面效果9】9patch图片
1.什么是"9妹"(9patch)? 它是一个对png图片做处理的一个工具,能够为我们生成一个"*.9.png"的图片; 2.何为"*.9.png& ...
- 【Android 界面效果22】Android的Tab与TabHost
Tab与TabHost 这就是Tab,而盛放Tab的容器就是TabHost 如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了.一个Activity,对应了多个功能布局. ①新建一个Tab项 ...
- 【Android 界面效果10】Android中View,ViewGroup,Window之间的关系
一.首先说说View和ViewGroup吧 Android系统中的所有UI类都是建立在View和ViewGroup这两个类的基础上的.所有View的子类成为"Widget",所有V ...
- android 头像球_【Android 界面效果44】Android之圆头像实例
在很多应用中,我们看到,个人主页里面的头像一般都是圆的,设计成圆的会使整个界 面布 局变的优雅漂亮.那么,怎么使头像变圆呢?有的人说可以在上面加一个中间为透明圆形的png图,用它来遮盖住头像不就行了嘛 ...
- 【Android 界面效果43】Android LayoutInflater的inflate方法中attachToRoot的作用
我们在ListView的Adapter的getView方法里面经常会调用两个参数的inflate方法, mInflater.inflate(R.layout.adv_viewpager, null); ...
- Android中当item数量超过一定大小RecyclerView高度固定
Android中当item数量超过一定大小时,将RecyclerView高度固定 方法1 直接通过LayoutParams来设定相应高度 ViewGroup.LayoutParams lp = rv. ...
- Android开发_android界面效果全汇总
(一)Activity页面切换的效果 先介绍下左右滑动切换Activity,对于复杂的手势原理一样,具体后述. 主要原理为监控触屏事件和手势事件,在触屏事件处理函数中调用手势事件处理函数,表示用户触屏 ...
- Android 入门第四讲03-列表RecyclerView(RecyclerView使用步骤(详),RecyclerView指定一行item的数目+指定一行item的数量,并且设置列表方向)
Android 入门第四讲03-列表RecyclerViewRecyclerView使用步骤(详),RecyclerView指定一行item的数目+指定一行item的数量,并且设置列表方向) 1.Re ...
最新文章
- CodeForces - 755C PolandBall and Forest (并查集)
- VS中添加命令行参数的方法
- echarts tooltip的formatter回调参数设置,两组参数情况
- 网站架构演变和知识体系
- 【poj题集整理】【存下来并不会看】
- 如何分割合并ISO文件
- button执行onclick函数_千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的...
- python 自定义向量化(vectorized)操作函数
- java 动态报表 sql,报表SQL
- Windows开发签名工具(SignTool)下载
- 爱快支持服务器网卡嘛,虚拟机安装爱快软路由,跟我一起来测试,单网卡安装教程...
- 电脑自动同步服务器时间bat,用Internet时间服务器来同步本机系统时间的批处理...
- 【问题日记】windows11 找不到组策略问题解决
- 有码变高清!一秒还原马赛克
- 阿里云服务平台,分布式架构云平台解决方案
- Android NFC开发(二)——Android世界里的NFC所具备的条件以及使用方法
- python制作词云图片的三个步骤_3分钟教你用python制作一个简单词云
- CodeForces-937D-Sleepy Game
- FA-PEG-SH 叶酸PEG巯基
- 【转载】遥感影响数据集整理