Рассмотрение превосходного примера Mark Murphy по http://github.com/commonsguy/cw-advandroid/tree/master/Views/ColorMixer/, который Вы видите, где он определил пользовательский виджет под названием ColorMixer. ColorMixer имеет атрибут, названный "initialColor", объявленным в attrs.xml.
В конструкторе для 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 был в более общем плане полезен? Я хочу использовать тот же источник, неизмененный, или даже возможно, поместить его в файл банки. Это означает, что Вы не можете сделать ссылки на '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
Глядя на отличный пример Марка Мерфи
:: краснеет ::
Спасибо!
Но что, если бы я хотел, чтобы ColorMixer был более полезно?
Я хочу использовать тот же источник, без изменений или даже, может быть, поместить его в jar-файл. Это означает, что вы не можете сделать ссылки на 'R'.
И именно поэтому я начал Android Parcel Project,в течение последних нескольких часов, как выясняется.
Проблема двояка: получение идентификатора из строкового представления и обеспечение того, чтобы этот материал не сталкивался с другими многоразовыми виджетами. Кроме того, вам нужно развернуть эти ресурсы, которые не могут быть просто спрятаны в JAR. И так далее.
У меня есть вспомогательный код (также доступный в форме посылки), который будет обрабатывать идентификатор ресурса. Документация легкая, но будет улучшаться в течение недели.
Если у вас есть дополнительные вопросы о том, как работает инженерия всего этого, присоединяйтесь к cw-android Google Group и присоединяйтесь туда!