android平台已經給我們提供了很多標準的元件,如:textview、editview、button、imageview、menu等,還有許多布局控制項,常見的有:absolutelayout、linerlayout、relativelayout、tablelayout等。但隨著人們對視覺的需求,基本元件已無法滿足人們求新求異的要求,於是我們常常會自定義元件,用來實現更美觀的ui介面。
實現自定義控制項通常有兩種途徑,一種是繼承view類,重寫其中的重要方法,另一種是繼承viewgroup類,通過重寫父類中的有些方法,達到重新繪製元件的目的。最近做了乙個自定義**控制項的練習,從中總結到一些經驗。在這個練習中,我通過繼承viewgroup類,重新繪製了用於呈現**樣式的容器元件,首先來看一下父類viewgroup。該類有三個構造方法:viewgroup(context context)、viewgroup(context context,attributeset attrs)、viewgroup(context context,attributeset attrs,int defstyle),我們自定義的繼承viewgroup的類需要實現它的至少乙個構造方法。viewgroup中有幾個方法非常重要,這幾個方法更好的幫助我們實現自己的元件的布局與繪製。
1、onlayout方法
該方法用於在容器中如何擺放子控制項,如果不重寫該方法,子控制項將無法在布局控制項中得以展示,該方法有五個引數,用於設定子控制項的上下左右四個邊框的位置,還有乙個標誌位,這個方法也是子類必須實現的,因為該方法是個抽象方法。
2、addview方法
該方法用於在容器元件中新增子控制項
3、dispatchdraw方法
通過該方法,我們可以獲取canvas物件,該物件允許我們在元件上畫任意我們想要的圖形,在這個**控制項中,我們可以在畫布上上**的外邊框及**線
4、getchildcount和getchildat方法
這兩個方法用於獲取該容器控制項中子控制項的數目和位置,便於我們對子控制項的排版和布局
5、onmeasure方法
這個方法是用來測量子控制項大小的,它在onlayout方法之前被呼叫,測量了子控制項的大小尺寸,然後可以繪製子控制項在容器元件中的布局位置
下面直接給出**示例,僅供參考
首先是**控制項的類:
public class tableview extends viewgroup
public tableview(context context, int row,int col) else if(row==0 || col==0)
else
// 新增子控制項
this.addotherview(context);
} public void addotherview(context context)else
this.addview(view);
} }
} @override
protected void dispatchdraw(canvas canvas) else
} }
public void setrow(int row)
public void setcol(int col)
}
然後我們在activity中使用我們的控制項:
public class mainactivity extends activity implements onclicklistener
@override
public boolean oncreateoptionsmenu(menu menu)
@override
public void onclick(view v) else if("".equals(col.gettext().tostring()))else
} }
public class tableactivity extends activity
}
效果圖如下:
Android初級控制項 顏色
在android中,顏色值由透明度alpha和rgb 紅 綠 藍 三原色定義,有八位16進製制數和6位16進製制數。八位編碼相對於六位編碼多了乙個透明度。而編碼中的每一塊都從00 ff,其中00表示 ff數字越大,透明越不明顯,但顏色越來越濃。從布局檔案中獲取名叫tv code six的文字檢視 t...
Android 動態設定控制項文字顏色和背景色
一般我們要實現乙個控制項按壓變背景色,我們會寫selector的xml檔案,比如 控制項背景色選擇器 param context 當前上下文 param idnormal 預設 param idpressed 按壓時 return public static statelistdrawable se...
設定控制項的顏色,字型
package com.oyzz.ch3 6 import android.os.bundle import android.view.view 必須引用 widget.button才能宣告使用button物件 import android.widget.button 必須引用 widget.tex...