ViewTreeObserver用法示例

来源:互联网 发布:如何申请淘宝 编辑:程序博客网 时间:2024/06/18 13:21

ViewTreeObserver可以监听View的布局变化,它有多个监控接口。

这里以OnGlobalLayoutListener为例,简单记录一下它的使用方法:

//我们以RecyclerView为例,目的是动态调整RecyclerView每一行成员的数目@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {    View v = inflater.inflate(R.layout.fragment_photo_gallery, container, false);    //找到RecyclerView    mPhotoRecyclerView = (RecyclerView) v.findViewById(R.id.fragment_photo_gallery_recycler_view);    //获取RecyclerView的ViewTreeObserver    ViewTreeObserver viewTreeObserver = mPhotoRecyclerView.getViewTreeObserver();    //为ViewTreeObserver添加一个OnGlobalLayoutListener    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {        private int last = 0;        //当布局发生变化,即绘制RecyclerView时就会回调onGlobalLayout接口        @Override        public void onGlobalLayout() {            if (getView() != null) {                //在xml中,我们定义RecyclerView的宽度是match_parent                //于是,设备旋转时,width就会发生改变                int width = getView().getWidth();                //指定每个成员的宽度为400,得到每一列可放置的成员数量                int count = width / 400;                //发生改变时,就重新设置RecyclerView的LayoutManager                if (last != count) {                    //每次改变LayoutManger后,RecyclerView均会重绘                    //于是横竖屏切换后,每一行可以动态地放置成员的数量                    mPhotoRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), count));                    last = count;                }            }        }    });    setupAdapter();    return v;}
0 0