當我們自定義view時,有時候需要提供一些自定義的引數,怎樣來提供這些自定義的屬性呢?步驟如下:
1、在res/values下建立乙個attrs.xml檔案;
2、在自定義view建構函式裡面獲取這些屬性;
3、在布局檔案中指定命名空間以及填寫屬性。
res/values/attrs.xml,使用到declare-styleable
標籤,該標籤的內容是attr
標籤,有name
和format
兩個屬性。name顧名思義就是自定義屬性的名字,而format則有string、color、boolean、dimension、integer、float、fraction等值。
<?xml version="1.0" encoding="utf-8"?>
name="myview">
name="myviewtext"
format="string">
attr>
name="isdigits"
format="boolean">
attr>
declare-styleable>
resources>
通過typearray獲取到自定義的屬性,然後獲取布局檔案中的值。
public myview(context context, attributeset attrs, int defstyleattr)
當我們沒有在使用typedarray後呼叫recycle,編譯器會提示「this typedarray should be recycled after use with #recycle()」。官方的解釋是:**typedarray,以便後面重用。
當我們不做是否有此屬性的判斷就獲取乙個為null的string物件,操作時就會有空指標異常。除了上面這種寫法以外還有常見的另外一種,這種寫法比上面的寫法安全一點。
typedarray ta = context.obtainstyledattributes(attrs, r.styleable.myview, defstyleattr, 0);
// 布局檔案中使用自定義屬性的個數
intcount = ta.getindexcount();
for (int i = 0; i < count; i++)
}ta.recycle();
本例只是簡單列印出屬性值,真正的自定義view需要根據這些屬性值影響繪製流程。
指定命名空間:
xmlns:custom=""
注意:使用gradle構建一律使用上面的格式,而如果是eclipse工程最後apk/則指定包名。
使用屬性:
custom:isdigits="false"
custom:myviewtext="hello world!" />
""
xmlns:custom=""
android:layout_width="match_parent"
android:layout_height="match_parent">
.leelit
.example
.customview
.myview
android:layout_width="match_parent"
android:layout_height="match_parent"
custom:isdigits="false"
custom:myviewtext="hello world!" />
Android自定義控制項 自定義屬性
自定義屬性的過程 1.在res values資料夾中建立attrs的xml檔案。2.寫入標籤,定義子標籤attr,放入自定義屬性的名稱。format 可以用 來同時使用 1 reference 參考某一資源id 2 color 顏色值 3 boolean 布林值 4 dimension 尺寸值 帶有...
Android 自定義控制項屬性
前言 自定義控制項經常需要一些特殊的配置,新增一些自定義屬性。1.自定義屬性 attrs.xml檔案 所有自定義屬性需要在檔案中新增declare styleable節點來宣告,例如定義屬性background color設定背景色。自定義控制項attrdeclareview 自定義控制項繼承vie...
android自定義控制項新增自定義屬性
1 如果是自定義控制項,請在style.xml中或attrs.xml中宣告屬性 attr declare styleable 2 在theme中使用自定義的屬性,可以再多個主題中定義不同的屬性值 customize your theme here.color colorprimaryitem col...