android recyclerview宽度随item的宽度自适应
程序员文章站
2022-06-24 12:42:53
最近项目有个需求,要做这样的一个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