Android控制項 自定義屬性

2021-07-05 23:35:28 字數 1861 閱讀 4625

當我們自定義view時,有時候需要提供一些自定義的引數,怎樣來提供這些自定義的屬性呢?步驟如下:

1、在res/values下建立乙個attrs.xml檔案;

2、在自定義view建構函式裡面獲取這些屬性;

3、在布局檔案中指定命名空間以及填寫屬性。

res/values/attrs.xml,使用到declare-styleable標籤,該標籤的內容是attr標籤,有nameformat兩個屬性。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...