Experiments Never Fail

自作ビューで layout_width のマネをしたい時

android:layout_width って、型は dimension であるのに、Layout XML には、 "match_parent" とか "wrap_content" とか指定できる。これと同じことを自作ビューの自作プロパティでやりたい。

自作ビュー(カスタムビュー)の作りかたは下などを参照。

で、android:layout_width のマネをするには、 attrs.xml に以下のように書く。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="my_width" format="dimension">
<enum name="fill_parent" value="-1" />
<enum name="match_parent" value="-1" />
<enum name="wrap_content" value="-2" />
</attr>
</declare-styleable>
</resources>

Android Framework のソースコードにこう書いてあったので、真似しただけ。

自作ビューの実装クラスで、この値を読み込む時は、TypedArray.getLayoutDimension を使う。

public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, 0, 0);

_myWidth = a.getLayoutDimension(R.styleable.MyCustomView_my_width,
LayoutParams.WRAP_CONTENT);

a.recycle();
}

Android Framework 側で仕様が増えた時は、追従しないといかんのかー。

published at tags: Android