Android上要显示一个表格,没有Swing那么专门的JTable可用。

搜了下,一般用GridView,有诸多不便和需要自己实现的地方:

跟ListView一样的Adapter,getView的时候要把表格的二维空间转换成一维来返回。如果表格要画线,问题就来了,返回的Cell View处在一维中的,压根不知道自己在表格中的位置,所以不知道要绘制自己的哪根边界线。于是我封装了一个Cell View的View holder,传入count, column count, position,会根据自己所处的位置自动隐藏/展示上下左右四条边界线。

所有代码在Gist: Grid item view holder for GirdView which show the border lines properly.

https://gist.github.com/Viyu/3af499b51318128d1aab

核心代码:

public void setLineVisible(int totalCount, int columnCount, int position) {

// 只有一个item

if (totalCount < 2) {

mTopLine.setVisibility(View.VISIBLE);

mBottomLine.setVisibility(View.VISIBLE);

mLeftLine.setVisibility(View.VISIBLE);

mRightLine.setVisibility(View.VISIBLE);

return;

}

// 只有一行

if (totalCount == columnCount) {

mTopLine.setVisibility(View.VISIBLE);

mBottomLine.setVisibility(View.VISIBLE);

mRightLine.setVisibility(View.VISIBLE);

if (position == 0) {// 第一个

mLeftLine.setVisibility(View.VISIBLE);

} else {// 后面的

mLeftLine.setVisibility(View.GONE);

}

return;

}

// 只有一列

if (columnCount < 2) {

mLeftLine.setVisibility(View.VISIBLE);

mRightLine.setVisibility(View.VISIBLE);

mBottomLine.setVisibility(View.VISIBLE);

if (position == 0) {// 第一个

mTopLine.setVisibility(View.VISIBLE);

} else {// 后面的

mTopLine.setVisibility(View.GONE);

}

return;

}

// 至少两行两列

if (position == 0) {// 0, 0

mLeftLine.setVisibility(View.VISIBLE);

mRightLine.setVisibility(View.VISIBLE);

mTopLine.setVisibility(View.VISIBLE);

mBottomLine.setVisibility(View.VISIBLE);

} else if (position / columnCount == 0) {// 第一行

mLeftLine.setVisibility(View.GONE);

mRightLine.setVisibility(View.VISIBLE);

mTopLine.setVisibility(View.VISIBLE);

mBottomLine.setVisibility(View.VISIBLE);

} else if(position % columnCount == 0) {//第一列

mLeftLine.setVisibility(View.VISIBLE);

mRightLine.setVisibility(View.VISIBLE);

mTopLine.setVisibility(View.GONE);

mBottomLine.setVisibility(View.VISIBLE);

} else {//其他的

mLeftLine.setVisibility(View.GONE);

mRightLine.setVisibility(View.VISIBLE);

mTopLine.setVisibility(View.GONE);

mBottomLine.setVisibility(View.VISIBLE);

}

}

可以正确显示表格线的Grid item view的更多相关文章

  1. 使用Windows驱动的虚拟打印机,打印Excel表格无表格线问题解决(2)

    测试: 经前天的测试,最终还是没有明显的定夺到底是驱动的问题,还是打印机的问题.但是按照可能性来排查,最明显的一点就是其他测试环境不变的情况下增加一张图片,就可以打印出表格线,我始终觉得这里是突破点, ...

  2. easyui学习笔记7—在手风琴中显示表格

    在这一篇中我们看看如何在手风琴里面显示表格数据的. 1.先看看引用的资源 <link rel="stylesheet" type="text/css" h ...

  3. Html报表用Excel打开保持表格线【Html报表模板】

    注:本人调试的最简版,前两处红色部分是为了输出Excel表格线:x:str表示输出为文本样式,避免被输出为科学计数法. <!DOCTYPE html PUBLIC "-//W3C//D ...

  4. 用CSS正确显示人民币符号的HTML转义字符

    做电子商务的难免要跟钱打交道,特别是跟人民币接触更多,但人民币符号长什么样呢,是¥还是¥?糊涂了吧^~^,要知道答案很简单,找出一张新的一百元大钞,在背面看看那个防伪的银线,上面就有. 我们做网页时要 ...

  5. 采集的GPS数据如何正确显示在arcgis和cad中

    利用GPS定位卫星,在全球范围内实时进行定位.导航的系统,称为全球卫星定位系统,简称GPS.GPS是由美国国防部研制建立的一种具有全方位.全天候.全时段.高精度的卫星导航系统,能为全球用户提供低成本. ...

  6. label正确显示多行数据

    label显示多行文字时会遇到文字中包含换行符“\n”,这时需要对字符进行全部替换, if(labelContent.indexOf('\\n')>0){labelContent=labelCo ...

  7. 在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字

    在windows中,如何使用cmd命令行窗口正确显示编码为utf-8格式的文字呢? 正确的步骤如下: 1, 打开cmd命令行窗口 2, 输入命令 >chcp 65001 数字65001代表的是c ...

  8. Silverlight动画显示Line线

    目的:在silverlight中显示两点之间的连线,要求动画显示连线效果. 如果需实现动画效果不得不了解,Storyborad对象: Storyboard Silverlight   通过时间线控制动 ...

  9. EL表达式结合页面JSTL使用 迭代显示表格

    1.迭代显示表格 <%@ page isELIgnored="false"%><%@ taglib uri="/WEB-INF/struts-bean. ...

随机推荐

  1. SQL/LINQ/Lamda 写法[转发]

    SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees   .Sele ...

  2. Log4J日志配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  3. SharePoint 2013技巧分享系列 - 隐藏Blog和Apps左侧导航菜单

    企业内部网中,不需要员工创建Blog或者创建,安装SharePoint应用,因此需要在员工个人Web页面需要隐藏Blog或者Apps导航菜单, 其步骤设置如下: 该技巧适合SharePoint 201 ...

  4. Java里String.split需要注意的用法

    我们常常用String的split()方法去分割字符串,有两个地方值得注意: 1. 当分隔符是句号时("."),需要转义: 由于String.split是基于正则表达式来分割字符串 ...

  5. sql server pivot/unpivot 行列互转

    有时候会碰到行转列的需求(也就是将列的值作为列名称),通常我都是用 CASE END + 聚合函数来实现的. 如下: declare @t table (StudentName nvarchar(20 ...

  6. 在c#中使用指针

    如果想在c#中使用指针,首先对项目进行配置:在解决方案资源管理器中右击项目名选择属性(或在项目菜单中选择consoleApplication属性(consoleApplication为项名)),在生成 ...

  7. CommandBehavior.CloseConnection

    cmd.commandTimeout设置为了1秒,sql执行了很长时间还没有超时, cmd.ExecuteReader(CommandBehavior.CloseConnection)这样就会立马重现 ...

  8. jquery版的全选,全不选和反选

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...

  9. 教你一招:解决Win10 win7 删除文件或文件夹时提示“找不到该项目”

    问题很怪异,解决的办法却很简单. 首先,分析问题 使用不可显示ASCII字符或采用UNICODE字符方法创建的文件或文件夹: 名称中含有..等特殊符号文件或文件夹名称不符合Windows命名规范或建立 ...

  10. 【bzoj4514】 Sdoi2016—数字配对

    http://www.lydsy.com/JudgeOnline/problem.php?id=4514 (题目链接) 题意 n个数,每个数值为a[i],有b[i]个,权值为c[i].若两个数能配对当 ...