代码之家  ›  专栏  ›  技术社区  ›  Edward Falk

Android:我如何定义自定义小部件的属性?

  •  1
  • Edward Falk  · 技术社区  · 16 年前

    看看马克·墨菲在 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是为它所要包含的任何包编写和编译的,那么情况就是这样。

    但是如果我想让混色器更实用呢?我想使用相同的源代码,未修改,甚至可以将其放入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。

    1 回复  |  直到 16 年前
        1
  •  2
  •   CommonsWare    16 年前

    看看马克·墨菲的优秀榜样

    ::脸红:

    谢谢!

    但是如果我想让调色师 更普遍有用?

    You mean like this ?

    我想用同样的来源, 未修改,甚至可能将其放入 一个JAR文件。这意味着你不能 对“r”的引用。

    这就是为什么我开始 the Android Parcel Project 在过去的几个小时内。

    问题是双重的:从字符串表示中获取标识符,并确保这些东西不会与其他可重用的小部件发生冲突。另外,您需要部署那些资源,这些资源不能仅仅被塞进jar中。等等。

    我有一些 helper code (也可以以包裹形式提供)用于处理资源ID资料。文档很简单,但会在一周内有所改进。

    如果您对所有这些工程如何工作还有其他问题,请加入 cw-android Google Group 然后敲钟!