gridview 让子项充满
要让子项充満GridView,需要重新调整GridView中子项的高度,网上有人在Adapter里面调整,但是我这里试过不行,原因不清楚。
android中画view有两大流程,measure和draw,因为在measure的时候,我们还没法知道具体的宽高,所以只有在draw之前根据gridview的高度和子项的行数,重新设置子项的高度。
于是我继承GridView,重写dispatchDraw函数,在里面加入:
for(int i=0;i<getChildCount();i++){ View child=getChildAt(i); ViewGroup.LayoutParams layoutParams=child.getLayoutParams(); layoutParams.height=getHeight()/rows;//rows表示gridview中子项的行数 child.setLayoutParams(layoutParams); } super.dispatchDraw(canvas);
测试发现在有些手机上,重绘的时候,上面这种方法会导致闪烁,所以在网上找到了另外的方法:
public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.item_home_function, parent, false); ViewGroup.LayoutParams layoutParams=convertView.getLayoutParams(); layoutParams.height=parent.getHeight()/mRows;//计算每一行的高度 convertView.setLayoutParams(layoutParams); } if(convertView.getHeight()==0){//第一次调用getView时,parent的高度还是0,所以这里需要判断一下,并且重新设置,否则第一个子项显示不出来 ViewGroup.LayoutParams layoutParams=convertView.getLayoutParams(); layoutParams.height=parent.getHeight()/mRows; convertView.setLayoutParams(layoutParams); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: vue二级路由设置
- 下一篇: vue-cli实现多页面多路由