最近遇到一个RecyclerView设置LinearLayoutManager横向滑动时,子布局的根布局不论怎么设置他的大小都是无效的,每次都会被修改成match_parent,然后就特别无奈,于是小弟就去网上找资料,由于google没花钱上不去,百度就百度吧,于是就找到如下博客:
http://blog.youkuaiyun.com/ll530304349/article/details/52605202 感谢博主提供@LeeFrank96
发现他也发现设置大小无效的问题,虽然我是想设置成wrap_content,但毕竟大同小异嘛,于是我就按博客里面的方法修改了View的实例化方式即:
/**
* 创建ViewHolder
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View view = mInflater.inflate(R.layout.****,
viewGroup, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
以前我是这样写的:
/**
* 创建ViewHolder
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View view = View.inflate(R.layout.xxx,
null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
同时上面的博客还提供了原因分析,我这里就不贴了,但是我尝试后发现不行,我就纳闷了还傻傻的和博主的代码对照了好久,于是我就继续网上找资料,发现了@鸿洋大神的这篇文章:
http://blog.youkuaiyun.com/lmj623565791/article/details/38173061/
Android 自定义RecyclerView 实现真正的Gallery效果,然而我发现他实现方式和我差不多,写的并没有问题,日了狗了,没办法了,我开始方了,不知道是什么原因,迷糊了一会,我在想能不能自定义根布局的view,然后去复写onMeasure方法强制修改设置呢,于是我开始尝试,最终让我解决了,代码如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int itemCount = getChildCount();
if (itemCount == 0) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
final int heightSize = View.MeasureSpec.getSize(heightMeasureSpec);
int width = getPaddingLeft() + getPaddingRight();
for (int i = 0; i < itemCount; i++) {
View view = getChildAt(i);
measureChild(view, widthMeasureSpec, heightMeasureSpec);
width += view.getMeasuredWidth();
}
setMeasuredDimension(width, heightSize);
}
因为我目前的view是根布局下只有一个ImageView所以这么简单的写法就可以解决了,如果稍微复杂一点的就可能复杂一点,然后就可以开心的使用了,如果哪位大神有更好的解决办法,请告知,谢谢。
最后还是要感谢文中提到的两位大神提供的资源,一天又过去了,学到知识还是不错的。