android:layout_width
って、型は dimension
であるのに、Layout XML には、 "match_parent"
とか "wrap_content"
とか指定できる。これと同じことを自作ビューの自作プロパティでやりたい。
自作ビュー(カスタムビュー)の作りかたは下などを参照。
http://techbooster.org/android/application/7361/)
で、android:layout_width
のマネをするには、 attrs.xml に以下のように書く。
//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
を使う。
//MyCustomView.java
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 側で仕様が増えた時は、追従しないといかんのかー。