Android: как определить атрибут для пользовательского виджета? - PullRequest
1 голос
/ 11 мая 2010

Глядя на отличный пример Марка Мерфи на 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 был более полезным? Я хочу использовать тот же источник, неизмененный, или даже, может быть, положить его в файл 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 Ответ

2 голосов
/ 11 мая 2010

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

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

Спасибо!

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

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

Я хочу использовать тот же источник, немодифицированный, или даже, возможно, положить его в фляга Это означает, что вы не можете сделать ссылки на «R».

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...