这是自定义视图
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
实际实例化。