Android 自定義屬性

2021-07-09 20:12:40 字數 4185 閱讀 2003

今天看看如何自定義屬性,先總結一下步驟:

1.自定義乙個view

2.在values資料夾下新建attr.xml檔案,在裡面定義自己的屬性

3.在布局檔案中使用自定義的屬性,注意命名空間

4.在構造方法中獲取自定義的屬性

下面我們一步步來講解上面的步驟

1.寫出自己的類

public

class

customview

extends

view

public

customview(context context, attributeset attrs) }}

2.自定義屬性

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

name="test">

name="text"

format="string"/>

name="textsize"

format="dimension"/>

name="textcolor"

format="color"/>

declare-styleable>

resources>

format屬性代表當前值得型別:

android attr.xml檔案中attr節點format屬性有效值

reference:引用,如其它資源

color:顏色

boolean:布林值

dimension:尺寸值

float:浮點值

integer:整型值

string:字串

fraction:百分數

enum:列舉值

3.在布局檔案中使用自定義的屬性

在android studio中,使用自定義的屬性需要使用命名空間

xmlns:custom=""
在eclipse中,需要使用字尾為包名的命名空間

xmlns:custom=""
布局檔案如下:

""

xmlns:tools=""

xmlns:custom=""

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".mainactivity">

android:layout_width="wrap_content"

custom:text = "helloworld"

custom:textcolor = "#ff0000"

custom:textsize = "20sp"

android:layout_height="wrap_content" />

4.在構造方法中獲取自定義的屬性

我們使用如下的構造方法

public

customview(context context, attributeset attrs)

因為這個構造方法有乙個引數attrs,這個引數代表了屬性的集合,

我們先把所有的屬性列印出來

我們可以看到把所有的值都正確列印出來了。

下面我們把布局檔案改一下,因為在開發中我們可能會寫成這樣:

""

xmlns:tools=""

xmlns:custom=""

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".mainactivity">

android:layout_width="wrap_content"

custom:text = "@string/helloworld"

custom:textcolor = "#ff0000"

custom:textsize = "@dimen/height"

android:layout_height="wrap_content" />

然後我們繼續列印屬性的名稱和值:

我們可以看到,如果我們屬性的值採用的是引用的方式,那麼列印出來的值也是@的形式,如果我們想要列印出正確的值該怎麼辦,這時候我們就需要使用typedarray。

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

.test);

通過上下文的這個方法來獲得 typedarray物件,該方法接受兩個引數,乙個是屬性集合attr,乙個是我們定義的屬性集合的名稱,通過r.styleable.名稱來獲得

下面看怎麼獲得所有的屬性:

我們可以看到,所有的值已經正確獲得了。注意,在最後我們要呼叫recy()方法**typedarray,以便下乙個呼叫者進行呼叫。

下面我們看看attr.xml中的styleable是幹什麼的,我們可以不使用這個,直接寫屬性嗎,比如

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

name="text"

format="string"/>

name="textsize"

format="dimension"/>

name="textcolor"

format="color"/>

resources>

答案是可以的。

如果寫成這樣我們看看需要怎樣來獲取屬性

相比之前,我們將r.styleable.test換成了,mattr,

r.styleable.text換成了0

r.styleable.textsize換成了1

r.styleable.textcolor換成了2

為什麼可以這樣做呢,其實之前是因為styleable幫我們完成了這些事情,下面我們去r檔案中看看就明白了。

這下大家明白了吧,所以說styleable幫我們做了一些事情,讓我們寫起**來更加方便了。

Android 自定義屬性

1 在values資料夾下新建xml檔案,命名為attrs.xml,在該檔案中新增你的自定義屬性,例如 2 在布局檔案中使用 首先要定義命名空間xmlns test 命名根據喜好可以隨便取,url中packagename為你專案的包名 具體使用 3 在自定義控制項中讀取 在使用了自定義的屬性後,會呼...

android自定義屬性

建立自定義類myview android layout width wrap content android layout height wrap content sdj name abc sdj age 10 sdj color drawable bg shap 此時會報錯,因為缺少了sdj這個命...

Android自定義屬性

一 前言 對於自定義屬性,我想新手一定是雲裡霧裡吧,看了幾遍部落格,感覺寫的有點複雜,我就根據自己的使用簡單的寫個用法和步驟吧。二 步驟 1 自定義乙個customview extends view 類,這個就不需要講了吧,直接新建乙個就行 2 編寫values attrs.xml,在其中編寫sty...