CircleView
というカスタムコンポーネントがあり、_attrs.xml
_で定義されているfillColor
というカスタム属性を変更したい:
_<declare-styleable name="CircleView">
<attr name="radius" format="integer" />
<attr name="fillColor" format="color" />
</declare-styleable>
_
最初にレイアウトXMLで設定しましたが、現在は次のようになっています(名前空間circleview
は_xmlns:circleview="http://schemas.Android.com/apk/res-auto"
_として定義されています。XMLで定義すると正常に機能するため、これは問題):
_<com.mz496.toolkit.CircleView
...
circleview:fillColor="#33ffffff"/>
_
fillColor
を拡張するCircleView
でView
属性を問題なく取得できますが、その値を設定する方法がわかりません。
setBackgroundColor
のようなものを調査し、他の「set」メソッドを探しましたが、見つかりませんでした。私は次のような方法を想像しました
circle.setAttribute(R.styleable.CircleView_fillColor, "#33ff0000")
レイアウト内のCircleView
はCircleView
クラスのインスタンスにすぎないため、_CircleView.Java
_に関数を追加するだけです。
_public void setFillColor(int newColor) {
fillColor = newColor;
}
_
そして、必要なときにいつでもそれを呼び出します:
_CircleView circle_view = (CircleView) findViewById(R.id.circle_view);
circle_view.setFillColor(0x33ffffff);
circle_view.invalidate();
_
また、これは内部変数を変更するだけですが、カスタムコンポーネントは全体が自動的に再描画される場合にのみ自動的に再描画されるため、View
クラスのinvalidate()
メソッドを使用してカスタムコンポーネントを再描画する必要があることにも注意してください。ビューが再描画されます。例:フラグメントを切り替えるとき(参照: ビューにそれ自体を再描画させる )。
(これは、「これを自分で定義する必要がありますか?」と尋ねようとしたときに最後に理解し、自分で定義してみましたが、うまくいきました。)