欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android recyclerview宽度随item的宽度自适应

程序员文章站 2022-03-20 22:52:03
最近项目有个需求,要做这样的一个recyclerview:recyclerview的宽度自适应item的宽度当然在布局里写上 wrap_content 是没什么用的,它该撑多宽撑多宽,完全没有自适应item的宽度于是就想到了以下几步:1,我先在 布局xml 代码里给这个recyclerview的宽度设置成0dp2,给recyclerview 添加一个数据观察者3,当有数据了之后,去获取第一个item的宽度,重设 recyclerview的宽度4,移除数据观察者 搞定下面的代码是关...

最近项目有个需求,要做这样的一个recyclerview:recyclerview的宽度自适应item的宽度

当然在布局里写上 wrap_content 是没什么用的,它该撑多宽撑多宽,完全没有自适应item的宽度

于是就想到了以下几步:

1,我先在 布局xml 代码里给这个recyclerview的宽度设置成0dp

2,给recyclerview 添加一个数据观察者

3,当有数据了之后,去获取第一个item的宽度,重设 recyclerview的宽度

4,移除数据观察者 搞定

下面的代码是关于添加观察者,获取宽度、重设宽度、移除观察者

recycler_title.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                LinearLayoutManager manager = (LinearLayoutManager) recycler_title.getLayoutManager();
                View view=manager.findViewByPosition(0);
                ViewGroup.LayoutParams vl=recycler_title.getLayoutParams();
                vl.width= ViewUtil.getViewWidth(view);
                recycler_title.setLayoutParams(vl);
                recycler_title.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        });
public class ViewUtil {
    public static int getViewWidth(View view) {
        int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        view.measure(widthSpec, heightSpec);
        int measuredWidth = view.getMeasuredWidth();//测量得到的textview的宽
        return measuredWidth;
    }

}

如果还有别的方式,希望有人能指出,谢谢

本文地址:https://blog.csdn.net/t7g367/article/details/110548755