Android開發之自定義屬性的使用
阿新 • • 發佈:2019-02-05
自定義屬性一般會在我們自定義一個view的時候會用到,這個其實在系統應用中相當的常見,比如我目前維護的系統launcher應用,裡面就是相當多的自定義view會用到這個自定義屬性設定,那麼現將其總結總結。有些東西不去總結下來,時間久了真的會忘記。
步驟一:
先在專案工程資原始檔res/values目錄下生成一個attrs.xml檔案
檔案程式碼示例如下<大家根據自己的需求定義就好>:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="center_x" format="integer" />
<attr name="center_y" format="integer" />
<attr name="circle_r" format="integer" />
<attr name="scroll_bar" format="integer" />
<attr name="scroll_item" format="integer" />
<attr name="scroll_begin" format="float" />
<attr name ="scroll_end" format="float" />
<attr name="scroll_uid" format="integer" />
<attr name="copy_scroll_bar" format="integer" />
<attr name="copy_scroll_item" format="integer" />
<attr name="copy_scroll_begin_angle" format="float" />
<attr name="copy_scroll_end_angle" format="float" />
<!-- 定義一個屬性 -->
<attr name="duration" format="integer" >
</attr>
<!-- 可以定義一個styleable物件來組合多個屬性 -->
<declare-styleable name="AlphaImageView">
<attr name="duration"/>
</declare-styleable>
</resources>
步驟二:
在res/layout佈局資原始檔下的使用方式:
首先要引入屬性資源,仿寫Android原生引入方式,在佈局的最前面部分新增引入,然後將前面部分改成自己的ID,後面部分修改成當前專案工程的包名。最後再自定義的view使用屬性時通過自己定義的資源ID去引用即可。使用方式為:
步驟三:
最後一步就是在自定義view中取出這個屬性值然後進行一個使用,在我們自定義一個view時,需要實現這個parentView的建構函式,其中有帶兩個引數以上的建構函式都有AttributeSet attrs這個引數,這個引數就是用於這方面的。示例程式碼如下:
例一:
public EqSeekBarView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// 獲取樣式屬性
TypedArray typedArray = context.obtainStyledAttributes(attrs, EqRes.styleable.EqScroll, defStyle, 0);
mCenterX = typedArray.getInt(EqRes.styleable.center_x, 1);
mCenterY = typedArray.getInt(EqRes.styleable.center_y, 1);
mScrollBarDrawable = typedArray.getDrawable(EqRes.styleable.scroll_bar);
mScrollThumbDrawable = typedArray.getDrawable(EqRes.styleable.scroll_item);
mBeginPos = typedArray.getFloat(EqRes.styleable.scroll_begin, 0.0F);
mEndPos = typedArray.getFloat(EqRes.styleable.scroll_end, 0.0F);
int nSource = typedArray.getInt(EqRes.styleable.scroll_uid, 0);
typedArray.recycle();
}
例二:
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AlphaImageView);
// 獲取duration引數
int duration = typedArray.getInt(R.styleable.AlphaImageView_duration, 0);
// 計算影象透明度每次改變的大小
alphaDelta = 255 * SPEED / duration;