自定義屬性

自定義屬性
佈局文件
<com.example.administrator.myapplication.numberAddSubView
    android:id="@+id/numberAddView"
    whq:number_background="@drawable/add_sub_number_view_bg"
    whq:minValue="1"
    whq:maxValue="10"
    whq:value="2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

values包下創建attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="numberAddSubView">//view的名稱
        <attr name="value" format="integer|reference"/>
        <attr name="minValue" format="integer|reference"/>
        <attr name="maxValue" format="integer|reference"/>
        <attr name="number_background" format="reference"/>//引用類型
    </declare-styleable>
</resources>

可以在activity代碼中設置value 等的值//前提是有set方法
numberAddView = (numberAddSubView)findViewById(R.id.numberAddView);
numberAddView.setValue(15);

自定義屬性並獲取屬性值
咱們自定義的屬性都在attrs中
public numberAddSubView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    mContext = context;
    if(attrs!=null) {
這個是V7報中的 也可用TypedArray                              這裏是context.obtainStyledAttributes 方法也可
        TintTypedArray typedArray=TintTypedArray.obtainStyledAttributes(context,attrs,R.styleable.numberAddSubView);
       int value=typedArray.getInt(R.styleable.numberAddSubView_value,0);//默認爲0
        if(value>0) {//不等於0纔有值
            setValue(value);//屬性如果被賦值,則先執行屬性,再執行構造函數,然後是未被賦值的屬性初始化
        }
       int minValue=typedArray.getInt(R.styleable.numberAddSubView_minValue,0);//默認爲0
        if(minValue>0) {//不等於0纔有值
            setMinValue(value);//屬性如果被賦值,則先執行屬性,再執行構造函數,然後是未被賦值的屬性初始化
        }
       int maxValue=typedArray.getInt(R.styleable.numberAddSubView_maxValue,0);//默認爲0
        if(maxValue>0) {//不等於0纔有值
            setMaxValue(value);//屬性如果被賦值,則先執行屬性,再執行構造函數,然後是未被賦值的屬性初始化
        }
        Drawable numberAddSubView_number_number_background = typedArray.getDrawable(R.styleable.numberAddSubView_number_background);

        if(numberAddSubView_number_number_background!=null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                setBackground(numberAddSubView_number_number_background);
            }
        }
    }
    //把佈局添加到類中
    View view = View.inflate(context, R.layout.add_sub_number_view, numberAddSubView.this);
    btn_sub = (Button) findViewById(R.id.btn_sub);
    tv_value = (TextView) findViewById(R.id.tv_value);
    btn_add = (Button) findViewById(R.id.btn_add);

    btn_sub.setOnClickListener(this);
    btn_add.setOnClickListener(this);
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章