最近做项目需要用到表格,数据是动态指定的,本来用GridView是很方便的,可是老大不同意用这么重量级的控件,想办法吧。

做表格很容易想到用TableLayout,那就自定义一个来搞。

一、表格最蛋疼的就是那根线,网上有个很好的方法,大概思路是这样的:

1、给表格设置一个背景色(线的颜色)

2、给表格设置一个内边距(线的宽度的一半)

3、设置每一项内边距(线的宽度的一半)

3、给项的内容设置一个背景色(颜色不同于线即可)

显示效果大概是这样的:

二、数据的动态加载使用Adapter类,便与布局加载

自定义TableLayout加载的主体方法:

public void setAdapter(BaseAdapter baseAdapter, int column) {
    if (baseAdapter == null || baseAdapter.getCount() == 0) {
        return;
    }
    this.mAdapter = baseAdapter;
    this.column = column;
    drawLayout();
}
private void drawLayout() {
    removeAllViews();
    int realcount = mAdapter.getCount();
    int count = 0;
    if (realcount < column) {
        count = column;
    } else if (realcount % column != 0) {
        count = realcount + column - (realcount % column);
    } else {
        count = realcount;
    }
    TableRow tableRow = null;//每一行的TableRow
    for (int i = 0; i < count; i++) {
        final int index = i;
        View view = null;
        if (index >= realcount) {
        view = mAdapter.getView((realcount - 1), null, null);
        view.setVisibility(View.INVISIBLE);
        } else {
        view = mAdapter.getView(index, null, null);
        }
        if (index % column == 0) {// 整行
        tableRow = new TableRow(mContext);
        }
        if (tableRow != null) {//添加每一个Item
        tableRow.addView(view);
        }
        if (index % column == 0) {// 整行
        addView(tableRow, new TableLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        }
    }
}

三、使用和ListView的方式基本一样

public class MainActivity extends Activity {

    private List<Map<String, Object>> dataList;

    private TableBorderLayout layTable;

    private String[] datas = new String[] { "疯狂", "个性", "张扬", "抖擞", "加油", "奋斗",
        "努力", "精神" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      initViews();
      loadDatas();
    }

    private void initViews() {
      layTable = (TableBorderLayout) findViewById(R.id.layTable);
    }

    private void loadDatas() {
      dataList = new ArrayList<Map<String, Object>>();
      Map<String, Object> item = null;
      for (int i = 0; i < datas.length; i++) {
          item = new HashMap<String, Object>();
          item.put("Title", datas[i]);
          dataList.add(item);
      }
      layTable.setAdapter(new MyAdapter(this, dataList));
    }

}

感兴趣的可以去这个地址下载:https://github.com/PearLemon/TableBorderLayout.git

Android带边框表格的实现的更多相关文章

  1. Android ------------------ 带边框的圆角矩形

    <?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http:/ ...

  2. android 带边框的圆角按钮

    新建buttonstyle.xml 代码如下 <?xml version="1.0" encoding="UTF-8"?> <layer-li ...

  3. Android自定义控件 -- 带边框的TextView

    使用xml实现边框 原来使用带边框的TextView时一般都是用XML定义来完成,在drawable目录中定义如下所示的xml文件: <?xml version="1.0" ...

  4. Android GridView去除自带边框点击效果、去除右侧滚动条、禁止上下滑动

    一.去除自带边框点击效果: <com.example.gridview.MyGridView android:id="@+id/grid_upload_pictures" a ...

  5. 自定义带边框TextView--边框粗细不一的问题

    自定义带边框TextView 给textview加边框 最low的做法.textview外层套一层布局,然后给布局加边框样式(这么弱的做法,不能这么干) 自定义控件 canvas.drawLines ...

  6. css挤带边框的三角

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. UIImage类扩展返回一个带边框的圆形图片

    /** * 将image转换为圆型带边框的图片(最好写一个UIImage的类扩展) * * @param name 图片的名字 * @param borderWidth 外层边框的宽度 * @para ...

  8. Android -- 带你从源码角度领悟Dagger2入门到放弃

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

  9. Android -- 带你从源码角度领悟Dagger2入门到放弃(二)

    1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...

随机推荐

  1. Python使用TuShare将股票数据保存到Oracle数据

    TuShare是个获取股票数据的模块包,我们进行分析,需要将股票数据保存到本地,避免每次都从网上获取,由于本机装有ORCALE,以ORACLE为例介绍如何保存股票数据到本地. 一.大致思路:我们先获取 ...

  2. VMWARE修改CPUID

    在cmd shell下执行wmic cpu get ProcessorId命令,可是查看机器的cpuID,但这个命令显示的只是2组ID,实际CPUID,有4组 通过更改虚拟机配置文件.vmx可是实现任 ...

  3. [java]OutOfMemoryError 原因及解决办法

    导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环 ...

  4. android studio2.2 的Find Sample Code点击没有反应

    1 . 出现的问题描述:           右键点击Find Sample Code后半天没有反应,然后提示 Samples are currently unavailable for :{**** ...

  5. VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>

    最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题.但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但 ...

  6. 创建Odoo8数据库时的“new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)“问题

    Odoo8创建数据库时,显示如下错误信息: DataError: new encoding (UTF8) is incompatible with the encoding of the templa ...

  7. Java职业生涯规划

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...

  8. webstorm基础使用总结

    webstorm基础使用总结(不仅仅是一堆快捷方式) 注:原文链接: 水车 :  本次写的内容是我想到那个就写那个,都是本人平时写代码的时候的一些习惯,未必是最好的,贵在交流! 1:  shift+e ...

  9. (转)springMVC+mybatis+ehcache详细配置

    一. Mybatis+Ehcache配置 为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方 ...

  10. XML 特殊字符

    XML转义字符 以下为XML标志符的数字和字符串转义符 "     (" 或 ") '     (' 或 &apos;) &     (& 或 & ...