2010-05-11 125 views
1

看看Mark Murphy在http://github.com/commonsguy/cw-advandroid/tree/master/Views/ColorMixer/上的出色例子,你可以看到他定義了一個名爲ColorMixer的自定義小部件。 ColorMixer具有在attrs.xml中聲明的名爲「initialColor」的屬性。Android:我如何定義自定義小部件的屬性?

在構造函數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

回答

2

在尋找馬克·墨菲的很好的例子

::臉紅::

謝謝!

但是如果我想讓ColorMixer爲 更普遍有用呢?

You mean like this

我想用同一來源, 修改,甚至可能把它變成 一個jar文件。這意味着你不能讓 引用'R'。

而這正是我在過去幾個小時內開始the Android Parcel Project的原因。

問題有兩方面:從字符串表示中獲取標識符,並確保這些東西不會與其他可重用小部件相沖突。另外,您需要部署這些資源,這些資源不能僅僅放在JAR中。等等。

我有一些helper code(也可用於宗地形式),將處理資源ID的東西。文檔很簡單,但會在一週內改進。

如果您對所有這些工程的工作方式還有其他疑問,請加入cw-android Google Group並在那裏發出響聲!

+0

謝謝,我會跟隨你的鏈接。碰巧,我今天早上加入了cw-android。 – 2010-05-11 19:56:24