概述:
功能:在Android系统中动态显示表格
开发语言:java
开发环境:eclipse
Android版本:4.4.2
代码:
不废话了,直接上代码。
//作者:xudiwei@sina.com
package com.example.simpletable;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.View;
import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class SimpleTableView extends TableLayout
{//一个用于显示简易表格的VIEW
protected int m_ColumnN=2;//列的数目。该值只能在构造函数中设置,设置之后不能修改。
int m_LineColor=Color.BLACK;//线的颜色
int m_LineWidth=1;//线宽
protected List<TableRow> m_Rows;
protected List<List<View>> m_Views;
public int getM_ColumnN() {
return m_ColumnN;
}
public SimpleTableView(Context context) {
super(context);
// TODO Auto-generated constructor stub
m_Rows=new ArrayList<TableRow>();
m_Views=new ArrayList<List<View>>();
this.setWillNotDraw(false);
}
public SimpleTableView(Context context,int n) {//指定列的数目
super(context);
// TODO Auto-generated constructor stub
m_Rows=new ArrayList<TableRow>();
m_Views=new ArrayList<List<View>>();
if(n>0) m_ColumnN=n;
else m_ColumnN=2;
this.setWillNotDraw(false);
}
public void ClearRows()
{
if(m_Rows != null) m_Rows.clear();
if(m_Views != null) m_Views.clear();
m_Rows=new ArrayList<TableRow>();
m_Views=new ArrayList<List<View>>();
this.removeAllViews();
}
public int AddRow(java.lang.Object objects[])//添加一行,返回行数。如果objects的数目小于m_ColumnN则返回0。
{
if(objects==null) return 0;
if(objects.length<m_ColumnN) return 0;
List<View> CRowViews=new ArrayList<View>();
int i,nRows;
TableRow CRow;
String s1 = null,ss[]={" "};
View v1=null;
m_Rows.add(new TableRow(this.getContext()));
m_Views.add(new ArrayList<View>());
nRows=m_Rows.size();
CRowViews=m_Views.get(nRows-1);
CRow=m_Rows.get(nRows-1);
for(i=0;i<m_ColumnN;i++)
{
if(objects[i] != null) v1=CreateCellView(objects[i]);
if(v1 == null) v1=new View(getContext());
CRow.addView(v1);
CRowViews.add(v1);
}
this.addView(CRow);
return nRows;
}
public View GetCellView(int row,int column)//获得某一个单元格的View,row为行数,column为列数,从0开始
{
if(row<0||row>=m_Rows.size()) return null;
else
{
if(column<0||column>=m_Views.get(row).size()) return null;
else return m_Views.get(row).get(column);
}
}
protected View CreateCellView(Object obj)//根据obj的类型创建一个VIEW并返回之,如果无法识别Object的类型返回null
{
View rView=null;
String classname = obj.getClass().toString();
switch (classname)
{
case "class java.lang.String"://这个值是String.class.toString()的结果
TextView tView=new TextView(getContext());
tView.setText((String) obj);
rView=tView;
break;
case "class android.graphics.Bitmap":
ImageView iView=new ImageView(getContext());
iView.setImageBitmap((Bitmap) obj);
rView=iView;
break;
//在此处识别其它的类型,创建一个View并附给rView
default:
rView=null;
break;
}
return rView;
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
//
if(m_Rows.size()<1) return;
Paint paint1=new Paint();
int i,nRLinePosition=0,nCLinePosition=0,width=getWidth(),height=getHeight();
paint1.setStyle(Paint.Style.STROKE);
paint1.setStrokeWidth(m_LineWidth);
paint1.setColor(m_LineColor);
canvas.drawRect(new Rect(1, 1, width, height), paint1);
for(i=0;i<m_Rows.size();i++)
{
nRLinePosition+=m_Rows.get(i).getHeight();
canvas.drawLine(0, nRLinePosition, width, nRLinePosition, paint1);
}
for(i=0;i<m_Views.get(0).size();i++)
{
nCLinePosition+=m_Views.get(0).get(i).getWidth();
canvas.drawLine(nCLinePosition, 0, nCLinePosition, height, paint1);
}
}
}
下面的代码添加到需要显示表格的地方:
RelativeLayout A_Layout=(RelativeLayout) this.findViewById(R.id.A_Relayout);
//表格
SimpleTableView stv1=new SimpleTableView(this);
stv1.AddRow(new String[]{"属性","值"});
stv1.AddRow(new Object[]{"1",BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)});
stv1.AddRow(new String[]{"12","1"});
stv1.AddRow(new String[]{"12222","1"});
//stv1.m_LineColor=Color.RED;
LayoutParams lp= new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE);
stv1.setLayoutParams(lp);
A_Layout.addView(stv1);
如果需要调整字体、背景色等,请调用SimpleTableView.GetCellView获取单元格的View,再调用该View的方法。
效果:
---------------------------------------------EOB-------------------------------------------------------