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. Selenium-java-TestNg-的运行

    package com.day.www; import org.testng.annotations.AfterClass;import org.testng.annotations.AfterMet ...

  2. httpd配置.md

    httpd-2.2 配置 监听端口和IP 配置文件: Listen [IP:]PORT 省略IP表示为0.0.0.0 Listen指令可重复出现多次 修改监听socket,重启服务进程方可生效 可以监 ...

  3. UCenter创始人密码正确但是登录不了

    UCenter创始人密码正确但是登录不了,没有什么提示,就反复输入密码登录 也进不了......... ================================================ ...

  4. java并发编程学习: ThreadLocal使用及原理

    多线程应用中,如果希望一个变量隔离在某个线程内,即:该变量只能由某个线程本身可见,其它线程无法访问,那么ThreadLocal可以很方便的帮你做到这一点. 先来看一下示例: package yjmyz ...

  5. 基于Batcher比较器的双调排序网络

    1. Batcher比较器 Batcher比较器是指如果在两个输入端给定输入x,y,再在两个输出端输出最大值max{x,y}和最小值min{x,y}.如图1所示,我们规定Batcher比较器的上输出端 ...

  6. 如何重新划分linux分区大小

    1.下载脚本文件,将脚本文件内容复制 chmod +x resize.sh sudo ./resize.sh 输入上面命令后会看到下面的结果 root@odroid:~# sudo ./resize. ...

  7. 20145315&20145307《信息安全系统设计基础》实验五

    20145315&20145307<信息安全系统设计基础>实验五 北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1453 1452 姓名:陈俊达 ...

  8. 【六年开源路】FineUI家族今日全部更新!

      FineUI(开源版) 基于 ExtJS 的开源 ASP.NET 控件库 FineUI的使命 创建 No JavaScript,No CSS,No UpdatePanel,No ViewState ...

  9. 国内优秀npm镜像推荐及使用

    npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...

  10. PL/SQL 将旧表的一些字段赋值给新的表中的字段的做法

    INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表