【发布时间】:2014-04-24 15:02:24
【问题描述】:
我已经定义了一个自定义类:
public class CustomResource extends Resources {}
为了在运行时加载自定义外部颜色。使用 getResources().getColor() 时,这在 Java 代码中运行良好。
当通过 setContentView() 加载包含颜色引用的 XML 布局时,在扩展 XML 资源时永远不会调用 CustomResources 的 getColor()。
我已经在上下文中覆盖了 getResources 和 getSystemService,但是 getResources().getColor() 在解析 XML 属性时根本不会被 View 构造函数调用。
这是因为 Resource.Theme 中的 obtainStyledAttributes() 是从 Widget 的构造函数中调用的。
我现在不知道我还需要覆盖什么。
示例:layout.xml 包含对 drawable/button.xml 的引用,button.xml 包含对 colors/somecolor 的引用。
我现在需要来自 - 例如 - 一个 TextView 构造函数的调用(充气器通过调用带有 xml 属性作为参数的构造函数来创建一个 TextView)然后调用 obtainStyledAttributes() 来使用我的资源类来解析颜色而不是比目前在obtainStyledAttributes() 中发生的TypedArray 魔法。
【问题讨论】:
-
在创建 LayoutInflater 时使用什么?
-
我自己不创建它,例如,我在 Activity 中使用 setContentView()。布局当然是编译到应用程序中的。但我希望我的 Resources 类被 setContentView 后面的任何 Inflaters 使用。但是调用/创建自己的 LayoutInflater 也可以。我只是找不到任何示例来代替 setContentView。
-
所以扩展 LayoutInflater 并将覆盖 getResources 的自定义上下文传递给 ctor,或者更好地将其传递给静态“from()”方法
标签: java android android-resources layout-inflater