GridView相关
16lz
2021-01-23
这两天项目正好用到GridView,在此记录这次使用GridView所遇到的问题,虽然问题都很小白。
1、GridView均分问题
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;@Overrideprotected 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效果图 因项目最后一行正好排满,就没有考虑最后一行不足三项的情况,如果有这个需要,大家可以在循环时加个判断。
更多相关文章
- Android O 版本(Android 8.0) 存储空间不足时提醒
- android空间动画
- Android检测SD卡是否可用,Android获取磁盘可用空间,Android获取磁
- 【android】两个按钮的宽度各占屏幕的一半
- Android新增AppCompatTextView自适应字体大小和文本宽度
- 浅析Asp.Net使用Image/ImageButton空间显示本地图片的方法
- C++中动态内存分配与命名空间介绍
- XML中的命名空间的示例代码详解
- XML入门教程-XML名称空间详细介绍