プログラムからxmlの値を取得する

カスタムビューを作った時にxmlで指定している値をプラグラムから取リたい場合によく使う。

カスタム値じゃない場合

android.Rで指定されているものは簡単

        int[] attrArray = {android.R.attr.background};
        TypedArray typedArray = context.obtainStyledAttributes(attrs, attrArray);
        Color color = typedArray.getColor(0, Color.TRANSPARENT);

カスタム値の場合

ユーザが任意の値を設定したい場合はXMLから作る必要がある。XMLは「/values/attrs.xml」として作る。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomAttr">
        <attr name="custom_value" format="color"/>
    </declare-styleable>
</resources>

そしてこんな感じで取得する

        TypedArray typedArray = obtainStyledAttributes(attrs, R.styleable.CustomAttr);
        Color color = typedArray.getColor(0, Color.TRANSPARENT);

ここでの0はCustomAttrのインデックスになる。なので0がcustom_valueを表していることになる。