1. 程式人生 > >Android開發-使用TableLayout動態顯示錶格

Android開發-使用TableLayout動態顯示錶格

//作者:[email protected]
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);
		}
	}
}
下面的程式碼新增到需要顯示錶格的地方:

相關推薦

Android開發-使用TableLayout動態顯示

//作者:[email protected] package com.example.simpletable; import java.util.ArrayList; import java.util.List; import android.content.Context; import and

Android開發動態顯示和隱藏狀態列和導航欄

// //佈局填充狀態列,設定透明 // if (Build.VERSION.SDK_INT >= 21) { // View decorView = getWindow().getDecorView(); // int optio

EasyUI製作隱藏的表格,查詢時顯示和結果

1.HTML頁面很簡單,如圖:   2.接下來設定表格的隱藏與顯示,隱藏語句放到頁面初始化方法裡就行,顯示語句放到查詢方法裡如圖:   例如:頁面初始化方法:     查詢方法(即查詢按鈕的點選事件): &

Android開發通過adapter顯示listview

首先,定義一個adapter繼承於某個ArrayAdapter,例項化adapter時將要顯示的peers傳遞進去,然後通過listview.setadapter(new adapter)顯示, getview()方法決定每個item包含的資訊與顯示 adapter = new WiF

android 開發 checkBox的顯示和隱藏

           首先使用findviewbyid得到這個checkbox;       CheckBox pengRadioButton=(RadioButton) findVie

Delphi中統一顯示欄位名的高效方法

         問題描述:在開發資料庫程式時,我們經常要使用很多的表格顯示元件DBGrid。當DBGrid顯示某表格的資料時,其欄位標題預設的就是後臺資料庫中的表格的欄位名稱。而為了資料庫開發方便,後臺資料庫中的表格的欄位標題通常是用英文表示的,如用Empl

html做表格只顯示的外邊框

html做表格只顯示錶格的外邊框來自森大科技官方部落格 http://www.cnsendblog.com/index.php/?p=112我想問一個在dreamweaver中,我弄了一個登陸的表格,(包括登陸、註冊、忘記密碼)三行一列,我像只顯示錶格的外邊框,怎麼用程式碼實現 <table widt

android listview+popuwindow動態顯示遇到的問題

這兩條折騰listview+popuwindow顯示。 首先遇到listview顯示不正常(寬度總是為matchparent)。 為此在這裡寫上適應PopupWindow和ScrollView的方法——重寫listvie的onMeasure方法,如下: @Overridep

MVC顯示,點選列頭可以排序

前臺: <table class="table table-bordered table-hover"> <thead>

android開發base64圖片顯示

Log.d("pmftest", "onResponse: 圖片"+photoback); Bitmap bitmap=null; byte[]bitmapArray; bitmapArray=Base64.decode(photoback, Base64.DEFAU

如何使用EasyUI顯示介面

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android開發FrameLayout動態新增控制元件位置問題

       首先FrameLayout的子控制元件預設都是從左上角顯示的,還有最後新增的在最前面顯示。         一般是對FrameLayout.LayoutParams params進行操作

android開發筆記 動態生成控制元件

動態生成介面的方法很簡單首先要卻這個介面的佈局,是AbsoluteLayout,RelativeLayout還是其他,然後就可以再裡面新增控制元件了:public void onCreate(Bundle savedInstanceState) {super.onCreat

jsp中顯示

<% DataLogicTransaction dblt = new DataLogicTransaction("alcatel.ps1240_dest_t"); Document doc = dblt.currentDataQuery(); String view =

ajax請求得到後臺資料,前臺頁面,使用table模板然後clone,顯示,,不用append拼接 “字串和HTML表格標籤”

<%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=utf-8"   

android開發全屏顯示

在開發android的應用當中,我們會遇到將一些介面設定為全屏顯示的格式,有兩種實現的方法。其一是在Java程式碼中實現,其二是在配置檔案中實現。 1. 在Java程式碼中設定 super.onCreate(savedInstanceState);   req

解決Android開發中ViewPager動態設定PagerAdapter時第二次進入Fragment內容不顯示的問題

問題描述 筆者最近的Android專案要用到PagerSlidingTabStrip和ViewPager的組合,但是從github上下載原始碼後順利執行示例專案,用到自己的專案後發現一個問題,就是第二次進入該ViewPager所在Fragment後PagerS

Android開發(16)-TextView顯示情影象和文字

從這個案例中我們可以學到當我們美化圖片美化介面的時候可以在某一區域輸入圖片和文字混搭資訊,第三張圖片按比例縮小,第四張影象有超連結 佈局檔案 [html] view plaincopyprint? <RelativeLayoutxmlns:android="

BroadcastReceiver(廣播)的靜態註冊和動態註冊 --Android開發

encoding save private tac app tco sta content con BroadcastReceiver是安卓四大組件之一,本例通過代碼的方式演示靜態註冊和動態註冊。 1、靜態註冊 靜態註冊只需要AndroidManifest.xml中進行

Android開發 - 設置DialogFragment全屏顯示

方法 err override cat dial group 如果 全屏顯示 log 默認的DialogFragment並不是全屏,但有些需求需要我們將對話框設置為全屏(內容全屏),Android並沒有提供直接的API,通過其它不同的方法設置全屏在不同的機型上總有一些詭異的