看看Mark Murphy在http://github.com/commonsguy/cw-advandroid/tree/master/Views/ColorMixer/的优秀示例,您可以看到他定义了一个名为ColorMixer的自定义小部件。 ColorMixer在attrs.xml中声明了一个名为“initialColor”的属性。
在ColorMixer的构造函数中,他获取属性值,如下所示:
TypedArray a=getContext()
.obtainStyledAttributes(attrs, R.styleable.ColorMixer, 0, 0);
color = a.getInt(R.styleable.ColorMixer_initialColor, 0xFFA4C639);
a.recycle();
如果'R'可用于ColorMixer,这可以正常工作。如果使用ColorMixer编写并使用它将成为其中一部分的任何包进行编译,就会出现这种情况。
但是如果我想让ColorMixer更有用呢?我想使用相同的源代码,未经修改,甚至可能将其放入jar文件中。这意味着您无法引用“R”。
在我看来,我应该可以做类似
的事情TypedArray a=getContext()
.obtainStyledAttributes(attrs, what-do-I-do-here?, 0, 0);
int resid = context.getResources().getIdentifier("ColorMixer_initialColor",
"attr", "com.commonsware.android.colormixer.ColorMixer")
color = a.getInt(resid, 0xFFA4C639);
但是getIdentifier永远不会返回任何东西,只有零。还有什么我应该做的吗?我想重写这段代码完全独立于'R'
有关具体示例的源代码,请参阅www.efalk.org/tmp/CustomWidget.tar.gz
答案 0 :(得分:2)
看看Mark Murphy的优秀例子
:: blushes ::
谢谢!
但是,如果我想要ColorMixer,那该怎么办? 更普遍有用吗?
我想使用相同的来源, 没有修改,甚至可能把它放进去 一个jar文件。这意味着你无法做到 引用'R'。
这正是我在最近几个小时内开始the Android Parcel Project的原因。
问题有两方面:从字符串表示中获取标识符,并确保这些内容不会与其他可重用的小部件发生冲突。此外,您需要部署这些资源,而这些资源不仅可以隐藏在JAR中。等等。
我有一些helper code(也以包裹形式提供)来处理资源ID的东西。文档很轻,但会在一周内改进。
如果您对所有这些工程的工程原理有其他疑问,请加入cw-android Google Group并在那里加注!