TypedArrayとobtainStyledAttributesの使用

5777 ワード

次に、カスタムコントロールで使用方法を説明します.
1.まず変数を作成するにはvalues/attrsを作成します.xmlファイル、ファイル名は任意ですが、valuesディレクトリの下にあります.


    
    
        
        
    
    
    
        
        
        
    

ルートラベルresourcesの場合、定義された変数には名前が必要です.declare-styleable name=「MyButton」>で、buttonと定義されています.この名前には、複数のカスタムプロパティがあります.textSizeという名前のプロパティが定義されています.フォーマットはdimensionです.このformatはtextSizeプロパティのタイプを指定し、フォントサイズの定義にのみ使用できます.
2.次にカスタムButton:
package com.example.a31210.mybottombarlayout.activity.index;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.Button;

import com.example.a31210.mybottombarlayout.R;

/**
 * Created by YuShuangPing on 2018/4/13.
 */

public class MyButton extends Button {
    public MyButton(Context context) {
        super(context);
        init(context,null);

    }

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context,attrs);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context,attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.MyButton);
        this.setText(typedArray.getString(R.styleable.MyButton_text));
        this.setTextSize(typedArray.getDimension(R.styleable.MyButton_textSize,15));
        this.setTextColor(typedArray.getColor(R.styleable.MyButton_textColor,getResources().getColor(R.color.colorAccent)));
        typedArray.recycle();
    }

}

ここで、TypedArrayの例は属性の容器である、context.obtainStyledAttributes()メソッドが返されます.AttributeSetはノードの属性集合です
3.カスタム属性でレイアウトファイルに値を割り当てるには、次の手順に従います.


    
        
            

            

            
            

            
            

            
            

            
        

    
    





ルートラベルには次の項目が追加されています.
xmlns:button="http://schemas.android.com/apk/res-auto"

buttonという名前空間を宣言しましたが、myappは任意の名前で、自分で勝手に名前をつけることができます.
"http://schemas.android.com/apk/res-auto"

固定されています
 typedArray.getDimension(R.styleable.MyButton_textSize,15);

カスタムtextSizeの値が取得され、ない場合はデフォルトの値、15が使用されます.
最後に呼び出しを忘れないでください.
 typedArray.recycle();