1

这是自定义视图

public class MyView extends Button {
    private static int color;

    . . . 
}

此 XML 多次实例化 MyView

<LinearLayout . . .>

    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />

</LinearLayout>

我想知道color从 XML 初始化静态的正确方法是什么。
我已经知道一种解决方案(但我想知道是否有不同的推荐方式):

  • 定义自定义属性
<declare-stylable name=MyView>
    <attr name="color" format="integer" />
</declare-stylable>
  • 在任何实例化上使用自定义属性MyView
<com.example.test.MyView
    app:color="@color/red"
    . . ./>
  • 在 MyView 构造函数期间设置静态字段

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0);
int c = a.getInteger(R.styleable.MyView_color, -1);
如果( c != -1 ) 颜色 = c;

我唯一不喜欢这个解决方案的是它依赖于MyView实例化,通常在代码中,静态字段和方法可以独立访问,所以我想知道是否有一种方法可以设置静态字段也独立于MyView实际实例化。

4

0 回答 0