RecyclerView横向滑动布局宽度wrap_content无效

最近遇到一个RecyclerView设置LinearLayoutManager横向滑动时,子布局的根布局不论怎么设置他的大小都是无效的,每次都会被修改成match_parent,然后就特别无奈,于是小弟就去网上找资料,由于google没花钱上不去,百度就百度吧,于是就找到如下博客:

http://blog.csdn.net/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.csdn.net/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所以这么简单的写法就可以解决了,如果稍微复杂一点的就可能复杂一点,然后就可以开心的使用了,如果哪位大神有更好的解决办法,请告知,谢谢。

最后还是要感谢文中提到的两位大神提供的资源,一天又过去了,学到知识还是不错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值