はい。短いガイド:
1.属性XMLを作成する
内/res/values/attrs.xml
に新しいXMLファイルを作成し、属性とタイプを指定します
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
基本的<declare-styleable />
に、すべてのカスタム属性(ここでは1つ)を含むビューに1つを設定する必要があります。私は可能なタイプの完全なリストを見つけたことがないので、私は推測したもののソースを見る必要があります。私が知っている型は、(別のリソースへの)参照、色、ブール、次元、浮動小数点、整数、および文字列です。彼らはかなり自明です
2.レイアウトで属性を使用する
これは、1つの例外を除いて、上記と同じように機能します。カスタム属性には、独自のXML名前空間が必要です。
<com.example.yourpackage.MyCustomElement
xmlns:customNS="http://schemas.android.com/apk/res/com.example.yourpackage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
customNS:distanceExample="12dp"
/>
かなり簡単です。
3.渡された値を利用する
カスタムビューのコンストラクターを変更して、値を解析します。
public MyCustomElement(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomElement, 0, 0);
try {
distanceExample = ta.getDimension(R.styleable.MyCustomElement_distanceExample, 100.0f);
} finally {
ta.recycle();
}
// ...
}
distanceExample
この例では、プライベートメンバー変数です。TypedArray
他のタイプの値を解析するために、他にもたくさんのことがありました。
以上です。で解析された値をView
使用しonDraw()
て変更します。たとえば、それを使用して外観を適宜変更します。