AndroidのAttributeSetとは何ですか?
カスタムビューに使用するにはどうすればよいですか?
他の人にとっては、詳細な説明ですが、遅い回答。
AttributeSet(Android Docs)
XMLドキュメント内のタグに関連付けられている属性のコレクション。
基本的に、カスタムビューを作成しようとしていて、寸法や色などの値を渡したい場合は、AttributeSet
を使用して行うことができます。
以下のようなView
を作成したいと想像してください
背景が黄色の長方形とその内側の円、たとえば5dpの半径、および緑の背景があります。次のように、ビューでXMLを介して背景色と半径の値を取得する場合:
<com.anjithsasindran.RectangleView
app:radiusDimen="5dp"
app:rectangleBackground="@color/yellow"
app:circleBackground="@color/green" />
AttributeSet
が使用される場所です。このファイルを持つことができますattrs.xml
以下のプロパティを持つ、valuesフォルダー内。
<declare-styleable name="RectangleViewAttrs">
<attr name="rectangle_background" format="color" />
<attr name="circle_background" format="color" />
<attr name="radius_dimen" format="dimension" />
</declare-styleable>
これはビューなので、JavaクラスはView
から拡張されます
public class RectangleView extends View {
public RectangleView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.RectangleViewAttrs);
mRadiusHeight = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_radius_dimen, getDimensionInPixel(50));
mCircleBackgroundColor = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_circle_background, getDimensionInPixel(20));
mRectangleBackgroundColor = attributes.getColor(R.styleable.RectangleViewAttrs_rectangle_background, Color.BLACK);
attributes.recycle()
}
}
XmlレイアウトでRectangleView
にこれらのプロパティを使用できるようになり、RectangleView
コンストラクターでこれらの値を取得します。
app:radius_dimen
app:circle_background
app:rectangle_background
AttributeSetは、xmlリソースファイルで指定されたプロパティのセットです。カスタムビューで特別なことをする必要はありません。 View(Context context, AttributeSet attrs)
は、レイアウトファイルからビューを初期化するために呼び出されます。このコンストラクタをカスタムビューに追加するだけです。 SDKの Custom View の例を確認して、使用されていることを確認してください。
AttributeSetを使用して、xmlで定義するビューの追加のカスタム値を取得できます。例えば。 Defining Custom Attributes についてのチュートリアルがあり、「AttributeSetから値を直接読み取ることができます」と書かれていますが、実際にこれを行う方法は示されていません。ただし、styled属性を使用しない場合は警告が表示されます。
スタイル設定された属性全体を無視して、属性を直接取得する場合:
example.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://www.chooseanything.org">
<com.example.CustomTextView
Android:text="Blah blah blah"
custom:myvalue="I like cheese"/>
</LinearLayout>
Xmlnsには2行(xmlns = XML名前空間)があり、2行目はxmlns:customとして定義されていることに注意してください。次に、その下にcustom:myvalueが定義されます。
CustomTextView.Java
public CustomTextView( Context context, AttributeSet attrs )
{
super( context, attrs );
String sMyValue = attrs.getAttributeValue( "http://www.chooseanything.org", "myvalue" );
// Do something useful with sMyValue
}
ビューがXMLレイアウトから作成されると、XMLタグのすべての属性がリソースバンドルから読み取られ、AttributeSet
としてビューのコンストラクターに渡されます。
AttributeSet
から直接値を読み取ることは可能ですが、そうすることにはいくつかの欠点があります。
代わりに、AttributeSet
を obtainStyledAttribute()
に渡します。このメソッドは、遅延およびスタイル設定されたTypedArray
値の配列を返します。