今天看看如何自定義屬性,先總結一下步驟:
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...