Android 自定义TextView控件,用来组成表格方便数据的展示。

首先看一下效果

样式不是很好看,需要用的可以自己优化一下。

实现方式很简单。

  1、自定义控件 MyTableTextView 继承 TextView 重写onDraw方法。在里面添加话边框的操作。

  1. package lyf.com.mytableview;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.util.AttributeSet;
  8. import android.widget.TextView;
  9.  
  10. /**
  11. * lyf on 2016/06/27
  12. * 自定义TextView
  13. */
  14. public class MyTableTextView extends TextView {
  15.  
  16. Paint paint = new Paint();
  17.  
  18. public MyTableTextView(Context context, AttributeSet attrs) {
  19. super(context, attrs);
  20. int color = Color.parseColor("#80b9f2");
  21. // 为边框设置颜色
  22. paint.setColor(color);
  23. }
  24.  
  25. @Override
  26. protected void onDraw(Canvas canvas) {
  27. super.onDraw(canvas);
  28. // 画TextView的4个边
  29. canvas.drawLine(0, 0, this.getWidth() - 1, 0, paint);
  30. canvas.drawLine(0, 0, 0, this.getHeight() - 1, paint);
  31. canvas.drawLine(this.getWidth() - 1, 0, this.getWidth() - 1, this.getHeight() - 1, paint);
  32. canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1, this.getHeight() - 1, paint);
  33. }
  34. }

  2、主布局,什么也不用写。直接放一个LinearLayout就好。但因为表格的宽度和高度往往超过屏幕的宽高度,因此需要我们添加ScrollView 和HorizontalScrollView。为了让HorizontalScrollView填满整个ScrollView 需要在ScrollView设置属性 android:fillViewport="true"。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical">
  7.  
  8. <ScrollView
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:fillViewport="true"
  12. android:scrollbars="none"
  13. >
  14.  
  15. <HorizontalScrollView
  16. android:id="@+id/scroll_view"
  17. android:layout_width="match_parent"
  18. android:layout_height="match_parent"
  19. android:scrollbarAlwaysDrawHorizontalTrack="false"
  20. android:scrollbars="none">
  21.  
  22. <LinearLayout
  23. android:id="@+id/MyTable"
  24. android:layout_width="fill_parent"
  25. android:layout_height="wrap_content"
  26. android:layout_marginBottom="9dp"
  27. android:orientation="vertical"
  28. >
  29. </LinearLayout>
  30.  
  31. </HorizontalScrollView>
  32. </ScrollView>
  33. </LinearLayout>

  3、接下来写表格显示的样式文件table.xml。该布局文件用来显示表格每一行的样式。

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="match_parent">
  4.  
  5. <lyf.com.mytableview.MyTableTextView
  6. android:id="@+id/list_1_1"
  7. android:layout_width="50dp"
  8. android:layout_height="wrap_content"
  9. android:layout_alignBottom="@+id/list_1_2"
  10. android:layout_alignTop="@+id/list_1_2"
  11. android:gravity="center"
  12. android:textColor="#000"
  13. android:textSize="13sp" />
  14.  
  15. <lyf.com.mytableview.MyTableTextView
  16. android:id="@+id/list_1_2"
  17. android:layout_width="180dp"
  18. android:layout_height="wrap_content"
  19. android:layout_toRightOf="@+id/list_1_1"
  20. android:gravity="center"
  21. android:textColor="#000"
  22. android:textSize="13sp" />
  23.  
  24. <lyf.com.mytableview.MyTableTextView
  25. android:id="@+id/list_1_3"
  26. android:layout_width="100dp"
  27. android:layout_height="wrap_content"
  28. android:layout_alignBottom="@+id/list_1_2"
  29. android:layout_alignTop="@+id/list_1_2"
  30. android:layout_toRightOf="@+id/list_1_2"
  31. android:gravity="center"
  32. android:textColor="#000"
  33. android:textSize="13sp" />
  34.  
  35. <lyf.com.mytableview.MyTableTextView
  36. android:id="@+id/list_1_4"
  37. android:layout_width="100dp"
  38. android:layout_height="wrap_content"
  39. android:layout_alignBottom="@+id/list_1_3"
  40. android:layout_alignTop="@+id/list_1_3"
  41. android:layout_toRightOf="@+id/list_1_3"
  42. android:gravity="center"
  43. android:textColor="#000"
  44. android:textSize="13sp" />
  45.  
  46. <lyf.com.mytableview.MyTableTextView
  47. android:id="@+id/list_1_5"
  48. android:layout_width="100dp"
  49. android:layout_height="wrap_content"
  50. android:layout_alignBottom="@+id/list_1_4"
  51. android:layout_alignTop="@+id/list_1_4"
  52. android:layout_toRightOf="@+id/list_1_4"
  53. android:gravity="center"
  54. android:textColor="#000"
  55. android:textSize="13sp" />
  56.  
  57. <lyf.com.mytableview.MyTableTextView
  58. android:id="@+id/list_1_6"
  59. android:layout_width="100dp"
  60. android:layout_height="wrap_content"
  61. android:layout_alignBottom="@+id/list_1_5"
  62. android:layout_alignTop="@+id/list_1_5"
  63. android:layout_toRightOf="@+id/list_1_5"
  64. android:gravity="center"
  65. android:textColor="#000"
  66. android:textSize="13sp" />
  67.  
  68. <lyf.com.mytableview.MyTableTextView
  69. android:id="@+id/list_1_7"
  70. android:layout_width="100dp"
  71. android:layout_height="wrap_content"
  72. android:layout_alignBottom="@+id/list_1_6"
  73. android:layout_alignTop="@+id/list_1_6"
  74. android:layout_toRightOf="@+id/list_1_6"
  75. android:gravity="center"
  76. android:textColor="#000"
  77. android:textSize="13sp" />
  78. </RelativeLayout>

  4、最后把数据放到我们的table.xml文件中,并显示到我们的主布局文件中。

  1. package lyf.com.mytableview;
  2.  
  3. import android.app.Activity;
  4. import android.graphics.Color;
  5. import android.os.Bundle;
  6. import android.view.LayoutInflater;
  7. import android.widget.LinearLayout;
  8. import android.widget.RelativeLayout;
  9.  
  10. /**
  11. * lyf on 2016/06/27
  12. * 自定义表格显示
  13. */
  14.  
  15. public class MainActivity extends Activity {
  16.  
  17. private LinearLayout mainLinerLayout;
  18. private RelativeLayout relativeLayout;
  19. private String[] name={"序号","考号","姓名","出生年月","语文","数学","英语"};
  20.  
  21. @Override
  22. protected void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_main);
  25. mainLinerLayout = (LinearLayout) this.findViewById(R.id.MyTable);
  26. initData();
  27. }
  28.  
  29. //绑定数据
  30. private void initData() {
  31. //初始化标题
  32. relativeLayout = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.table, null);
  33. MyTableTextView title = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_1);
  34. title.setText(name[0]);
  35. title.setTextColor(Color.BLUE);
  36.  
  37. title = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_2);
  38. title.setText(name[1]);
  39. title.setTextColor(Color.BLUE);
  40. title = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_3);
  41. title.setText(name[2]);
  42. title.setTextColor(Color.BLUE);
  43. title = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_4);
  44. title.setText(name[3]);
  45. title.setTextColor(Color.BLUE);
  46. title = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_5);
  47. title.setText(name[4]);
  48. title.setTextColor(Color.BLUE);
  49. title = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_6);
  50. title.setText(name[5]);
  51. title.setTextColor(Color.BLUE);
  52. title = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_7);
  53. title.setText(name[6]);
  54. title.setTextColor(Color.BLUE);
  55. mainLinerLayout.addView(relativeLayout);
  56.  
  57. //初始化内容
  58. int number = 1;
  59. for (int i=0;i<10;i++) {
  60. relativeLayout = (RelativeLayout) LayoutInflater.from(this).inflate(R.layout.table, null);
  61. MyTableTextView txt = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_1);
  62. txt.setText(String.valueOf(number));
  63.  
  64. txt = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_2);
  65. txt.setText("320321**********35");
  66. txt = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_3);
  67. txt.setText("张三");
  68. txt = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_4);
  69. txt.setText("1992/04/21");
  70. txt = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_5);
  71. txt.setText("150");
  72. txt = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_6);
  73. txt.setText("200");
  74. txt = (MyTableTextView) relativeLayout.findViewById(R.id.list_1_7);
  75. txt.setText("120");
  76. mainLinerLayout.addView(relativeLayout);
  77. number++;
  78. }
  79. }
  80. }

下载链接

Android 自定义表格显示数据的更多相关文章

  1. 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)

    1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...

  2. Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)

    Android自定义照相机实现 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是 ...

  3. 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介

    前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...

  4. Android自定义View4——统计图View

    1.介绍 周末在逛慕课网的时候,看到了一张学习计划报告图,详细记录了自己一周的学习情况,天天都是0节课啊!正好在学习Android自定义View,于是就想着自己去写了一个,这里先给出一张慕课网的图,和 ...

  5. (转)[原] Android 自定义View 密码框 例子

    遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...

  6. Android 自定义View合集

    自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...

  7. Android 自定义ListView

    本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 数据,通过contextView.setTag绑定数据有按钮的ListView. 系统显示列表(L ...

  8. [原] Android 自定义View 密码框 例子

    遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...

  9. Android 自定义ScrollView ListView 体验各种纵向滑动的需求

      分类: [android 进阶之路]2014-08-31 12:59 6190人阅读 评论(10) 收藏 举报 Android自定义ScrollView纵向拖动     转载请标明出处:http: ...

随机推荐

  1. python之读取cdv

    csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存储为csv文件,文件内容是:No.,Name,Age,Score1,Apple,1 ...

  2. 关于vue.js中条件渲染的练习

    html: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8 ...

  3. 在 AndroidStudio 中添加和使用 Support Library

    添加Support Library 项目需要用到Support包时如何添加?其实非常简单. 第一步 打开SDK Manager 确认安装了最新的Support Library 和 Support Re ...

  4. 激!GSS系列

    #include <cstdio> ; ; inline int max(int, int); inline int getint(); inline void putint(int); ...

  5. Qt开发中的实用笔记一--xml,Qpainter,Delegate:

    因为开发环境不能联网,开发中用到有用的知识就记在word稳定中,不知不觉就记载了几十页,为避免笔记丢失,现在就一点点忘博客上搬,方便日后回顾! ---------------------------- ...

  6. ClownFish:比手写代码还快的通用数据访问层

    http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...

  7. Yii2.0中form->field如何获取主表的一个字段并且设置为只读

    <?= $form->field($model, 'last_login_time')->textInput(['readonly' => 'true']) ?>

  8. Android应用开发-Activity(重制版)

    Android四大组件:Activity,Service,Broadcast Receiver,Content Provider Activity是Context的子类,同时实现了Window.Cal ...

  9. Zookeeper基本配置

    前面两篇文章介绍了Zookeeper是什么和可以干什么,那么接下来我们就实际的接触一下Zookeeper这个东西,看看具体如何使用,有个大体的感受,后面再描述某些地方的时候也能在大脑中有具体的印象.本 ...

  10. 百度地图api2.0体验

    前言:这两天在做百度地图的功能,查看了百度官网的api完成了基本功能 api地址http://developer.baidu.com/map/jshome.htm 注意是javascript API ...