如何以编程方式设置自定义组件的自定义属性?

时间:2015-08-27 23:50:36

标签: android custom-component

我有一个名为CircleView的自定义组件,我想更改fillColor中定义的名为attrs.xml的自定义属性:

<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中定义它时,它工作正常,所以这不应该&#39 ;是一个问题):

<com.mz496.toolkit.CircleView
     ...
     circleview:fillColor="#33ffffff"/>

我可以在我的fillColor CircleView中获得View属性,但是我不知道如何设置其值。

我调查了setBackgroundColor之类的内容,并寻找其他&#34; set&#34;方法,但我找不到任何方法。我想象了一个像

这样的方法

circle.setAttribute(R.styleable.CircleView_fillColor, "#33ff0000")

1 个答案:

答案 0 :(得分:4)

布局中的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();

另请注意,这只会更改内部变量,但您仍需要使用invalidate()类的View方法重绘自定义组件,因为只有整个自定义组件才会自动重绘视图被重绘,例如切换片段时(参见:Force a View to redraw itself)。

(当我刚要问的时候,我最后想到了这一点,&#34;我是否需要自己定义?&#34;我自己尝试定义它,并且它有效。)