牛骨文教育服务平台(让学习变的简单)
博文笔记

gridview 让子项充满

创建时间:2015-05-04 投稿人: 浏览次数:2588

    要让子项充満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);
            }
}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。