Android如何自定義乙個View(一)

2021-07-03 07:18:06 字數 2592 閱讀 6967

首先,你需要在value資料夾下新建乙個attr.xml檔案(檔名可以任取,但不能有大寫的字母開頭).

內容大概有這些

<?xml version="1.0" encoding="utf-8"?>

name="circletip" >

name="circletipcolor"

format="color" />

name="circletipradiu"

format="dimension" />

declare-styleable>

resources>

稍稍解釋下

 

定義attr名稱

"circletipcolor"

format="color" />

定義attr屬性名稱和對應的值的型別

接著使用這些attr屬性,一般習慣做法是在建構函式裡面對傳入的attr做解析,因為這些屬性值在xml布局檔案裡面定義了,我們需要取到作為view初始化的資料,接下來看怎麼解析。

建構函式裡面一般會傳入乙個attributeset物件(如果沒有的話,那我們就取不到了),這個物件可以幫助我們取到xml定義的值。

typedarray typedarray = context.obtainstyledattributes(attrs,r.styleable

.circletip);

這句可以幫助我們取到xml裡面我們剛剛定義的declare-styleable的屬性初始值。會把它存到typedarray裡,我們把裡面的值取出來就好了。

mbgcolor = typedarray.getcolor(r.styleable

.circletip_circletipcolor, defaultcolor);

這樣就取出來了。是不是很簡單。

接著我們看看如何在xml布局檔案裡面使用新定義的attr屬性。

首先你需要在使用的地方宣告命名空間,那什麼是命名空間呢?

xmlns:circle=""
諾,xmlns表示宣告乙個命名空間,命名空間的作用之一就是簡化屬性賦值,我們可以用xmlns後面跟著的單詞表示「=」號後面比較長的空間名。命名空間宣告完了以後就是設定屬性值,用法就跟android:text一樣啦,還是

給個例子。

circle:circletipradiu="7dp"
需要注意的是命名空間的寫法

.com/apk/res/ + 應用包名

先寫到這裡。

下面介紹下format的取值型別

reference:參考某一資源id。

(1)屬性定義:

(2)屬性使用:

color:顏色值。

(1)屬性定義:

(2)屬性使用:

boolean:布林值。

(1)屬性定義:

(2)屬性使用:

dimension:尺寸值。

(1)屬性定義:

(2)屬性使用:

float:浮點值。

(1)屬性定義:

(2)屬性使用:

integer:整型值。

(1)屬性定義:

(2)屬性使用:

string:字串。

(1)屬性定義:

(2)屬性使用:

fraction:百分數。

(1)屬性定義:

(2)屬性使用:

enum:列舉值。

(1)屬性定義:

(2)屬性使用:

flag:位或運算。

(1)屬性定義:

(2)屬性使用:

注意:

屬性定義時可以指定多種型別值。

(1)屬性定義:

(2)屬性使用:

如何自定義乙個UIProgressView

viewcontroller.m裡的檔案 import viewcontroller.h import myprogressview.h inte ce viewcontroller end implementation viewcontroller void viewdidload void di...

php 自定義條件,php如何自定義乙個方法

在php中可以通過 function foo arg 1,arg 2,arg n 形式定義乙個方法。使用者自定義函式 乙個函式可由以下的語法來定義 example 1 展示函式用途的偽 function foo arg 1,arg 2,arg n echo example function.n re...

如何自定義乙個記憶體池?

目錄 我們先寫個簡單的第一版記憶體分配器 第二版第三版alloctor 第四版alloctor 推進式單向鍊錶操作 分配24 size個記憶體空間 可以見圖prealloctor class firstalloctor firstalloctor std size t get void showwh...