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实现多页面多路由
