美文网首页
GridView相关

GridView相关

作者: 鲁西西z | 来源:发表于2018-01-23 19:39 被阅读29次

    这两天项目正好用到GridView,在此记录这次使用GridView所遇到的问题,虽然问题都很小白。

    1、GridView均分问题

    <com.jsepc.omspf.platform.WIDGET.GridViewSplitLine 
        android:id="@+id/grid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:stretchMode="columnWidth"  <!-- 剩余空间均分到每列 -->
        android:background="#ffffff"
        android:numColumns="3"
        android:columnWidth="100dp"
        android:gravity="center"
        android:listSelector="#FFFFFF"
        />
    

    android:stretchMode属性:决定怎么分配剩余空间

    • spacingWidth
      除去griditem和gridview的左右padding,剩余的空间totalSpace用中间的空余空间去扩充,这里的中间的分割空间总数n = columns - 1,这n个空间平分totalSpace
    • spacingWidthUniform
      除去griditem和gridview的左右padding,剩余的空间totalSpace用n= columns + 1个空间去平分。与spacingWidth的区别就是分割空间多了两个,就是Gridview左右两边分别有一个,而且还不包括padding。
    • columnWidth
      除去gridview的左右padding和horizontalspacing,用列的宽度去填满剩余空间,就是把剩余的空间平均分给每列的宽度。

    2、自定义带分割线的GridView

    public class GridViewSplitLine extends GridView 
    
    // 定义行数
    private int rowNum;
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 获取列数
        int column = getNumColumns();
        // 获取item总数
        int total = getChildCount();
        
        // 计算行数
        if(total % column == 0){
            rowNum = total/column;
        }else{
            rowNum = total/column+1;
        }
        
        // 设置画笔
        Paint paint = new Paint();
        paint.setColor(Color.parseColor("#D8D8D8"));
        paint.setStrokeWidth(5);
        paint.setStyle(Style.STROKE);
        
        // 第一列最后一个item
        View viewRowLast = getChildAt((rowNum-1)*column);
        
        int width = getWidth();
        int height = viewRowLast.getBottom();
        
        // 绘制横线
        for (int i = 0; i < rowNum; i++) {
            View v = getChildAt(i*column);
            canvas.drawLine(0, v.getBottom(), width, v.getBottom(), paint);
        }
        
        // 绘制竖线
        for (int i = 0; i < column-1; i++) {
            View v = getChildAt(i);
            canvas.drawLine(v.getRight(), 0, v.getRight(), height, paint);
        }
    }
    
    分割线GridView效果图

    因项目最后一行正好排满,就没有考虑最后一行不足三项的情况,如果有这个需要,大家可以在循环时加个判断。

    相关文章

      网友评论

          本文标题:GridView相关

          本文链接:https://www.haomeiwen.com/subject/jmheaxtx.html