GridLayout 居中显示
来源:互联网 发布:c读取txt文件存入数组 编辑:程序博客网 时间:2024/06/06 02:11
GridLayout 居中显示
如果大家有使用过GridLayout来给RecyclerView使用,会发现其实是没有居中的,而官方也没有给出居中的方法,这里就讲讲如何让其居中。
原理
要做的这一点其实很简单,只要我们自己计算每一个item的宽度即可。例如三列的结构,如果在宽度较小的情况下,会靠在左边显示,导致不居中,我们也不可能自己对着屏幕测量然后在xml中设置合适的宽度,这些工作应该由代码来为我们完成。由代码计算出合适的宽度值,然后赋予我们的item,这样item的宽度相同并且平分了屏幕就完成了居中的效果。
设置item宽度
看了上面的原理,所以实现居中有两个操作,第一个是我们能够设置item的宽度,第二个是计算item的宽度。我们先来进行设置宽度的代码编写。
对于item的管理,我们都知道是适配器完成的,所以对于宽度的管理我们也是在适配器中实现的。在设配器中定义一个私有变量 mItemWidth
,用于保存item的宽度,当我们计算完item的宽度后,来保存在这个变量中。对于一个item的宽度改变应该怎么做?很显然,是使用LayoutParams来动态改变item的宽度。那应该在哪修改呢?对适配器熟悉的同学,应该就会马上意识到在 onCreateViewHolder
这一函数中修改即可。
public void setItemWidth(int width) { mItemWidth = width;}@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.all_route_item, parent, false); ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = mItemWidth; view.setLayoutParams(layoutParams); return new ViewHolder(view); }
这样的话,动态设置item的宽度,我们就完成了。
计算item宽度
这一步很简单,只用四则运算就可以了,但是有一个地方需要注意。我们只用在给recyclerview设置适配器的时候,调用适配器setItemWidth
函数并传入item的宽度值即可。
adapter.setItemWidth((int) ((recyclerview.getWidth()) / columns));
但是,有些同学会发现使用了之后,没有效果。如果出现了没有效果的情况,可以尝试输出recyclerview.getWidth的值,如果是0的话,就明白了。宽度高度为0,这怎么可能?事实上,如果遇到这种情况的同学就会明白,是因为控件还没有还没有完成绘制,你必须等待系统将绘制完View时,才能获得。
那应该如果获得到宽度呢?有几个方法,这里我只介绍我觉得最简单的一种方法:将一个runnable添加到Layout队列中:View.post()。因为runnable对象中的方法会在view的measure、layout等事件后触发。所以我们只用在runnable中设置适配器即可。
recyclerview.post(new Runnable() { @Override public void run() { GridLayoutManager layoutManager = new GridLayoutManager(mContext, columns); routeItems.setLayoutManager(layoutManager); Adapter adapter = new RoutesAdapter(array); adapter.setItemWidth((int) ((recyclerview.getWidth()) / columns)); recyclerview.setAdapter(adapter); } });
其他方法可以参考:http://www.cnblogs.com/kissazi2/p/4133927.html
这样的话,居中就大功告成了。
- GridLayout 居中显示
- GridLayout
- GridLayout
- gridlayout
- GridLayout
- GridLayout
- GridLayout
- gridlayout
- GridLayout
- GridLayout
- gridlayout
- GridLayout
- GridLayout
- GridLayout
- GridLayout
- GridLayout
- GridLayout
- 窗口弹出居中显示
- 聊聊clean code的编码、重构技巧
- 《oracle学习》-01-如何恢复误删的表记录数据
- 单元测试
- [DP+容斥] BZOJ1042: [HAOI2008]硬币购物
- SQL高级语句-CREATE TABLE 用于创建数据库中的表
- GridLayout 居中显示
- 通过Hibernate操纵对象(上)
- codeforces 777E Hanoi Factory
- VMware下网络配置三种模式对比(桥接模式,主机模式,网络地址转换)
- PAT甲级1035. Password (20)
- 关于HTTP协议,一篇就够了
- nmap网络发现工具记录
- 【C++】《C++ Primer Plus》笔记(3)——数组
- 《云计算架构技术与实践》连载23:2.4.8 电信NFV云