Android: как я определяю атрибут для пользовательского виджета?

Рассмотрение превосходного примера 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

1
задан Edward Falk 11 May 2010 в 17:02
поделиться

1 ответ

Глядя на отличный пример Марка Мерфи

:: краснеет ::

Спасибо!

Но что, если бы я хотел, чтобы ColorMixer был более полезно?

Вы имеете в виду вот так?

Я хочу использовать тот же источник, без изменений или даже, может быть, поместить его в jar-файл. Это означает, что вы не можете сделать ссылки на 'R'.

И именно поэтому я начал Android Parcel Project,в течение последних нескольких часов, как выясняется.

Проблема двояка: получение идентификатора из строкового представления и обеспечение того, чтобы этот материал не сталкивался с другими многоразовыми виджетами. Кроме того, вам нужно развернуть эти ресурсы, которые не могут быть просто спрятаны в JAR. И так далее.

У меня есть вспомогательный код (также доступный в форме посылки), который будет обрабатывать идентификатор ресурса. Документация легкая, но будет улучшаться в течение недели.

Если у вас есть дополнительные вопросы о том, как работает инженерия всего этого, присоединяйтесь к cw-android Google Group и присоединяйтесь туда!

2
ответ дан 3 September 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: