1. 程式人生 > >Android開發之自定義屬性的使用

Android開發之自定義屬性的使用

自定義屬性一般會在我們自定義一個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;