Пользовательские состояния рисования не работают в библиотечных проектах - PullRequest
3 голосов
/ 11 февраля 2011

При любом поиске любой информации о том, как предоставить свое собственное пользовательское состояние для использования в селекторе списков рисованных состояний, происходит очень мало, но почти все из них (здесь и в других местах) ссылаются на эту публикацию в группах Google .

У меня есть геттеры и сеттеры, подобные этому: (не включено в вышеприведенный пост, но я использую их формулировку для простоты)

public void setFried(boolean fried){
    if(mFried != fried){
        mFried = fried;
        refreshDrawableState();
    }
}

public void isFried(){
    return mFried;
}

Я пытался заставить его работатьв последние пару часов, и, кажется, ничего не работает.Это просто не меняет внешний вид.Я наблюдал за тем, что произошло, как он вызывал onCreateDrawableState (), и смотрел, что получится из getDrawableState () после изменения пользовательского состояния.Значения пользовательских состояний фактически отображаются в массиве drawableState.

Поскольку я вижу, что состояние фактически сливается в массив, и, поскольку оно, похоже, полностью игнорирует любое из моих пользовательских состояний в селекторе,Я думаю, что xml должен быть неправильным.

Вот что предложено в посте:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res/my.app.package">

   <item android:drawable="@drawable/item_baked" state_baked="true"
      state_fried="false" />
   <item android:drawable="@drawable/item_fried" state_baked="false"
      state_fried="true" />
   <item android:drawable="@drawable/item_overcooked" state_baked="true"
      state_fried="true" />
   <item android:drawable="@drawable/item_raw" state_baked="false"
      state_fried="false" />
</selector>

Можете ли вы просто написать state_fried и state_baked или им нужен префикс, такой как app: state_fried?Если я пытаюсь добавить префикс, я получаю сообщение об ошибке консоли: No resource identifier found for attribute 'state_fried' in package my.app.package

Кто-нибудь на самом деле заставляет работать пользовательские состояния?Ссылочный пост - это все, что вам нужно, чтобы заставить это работать или что-то не так с ним или отсутствует?

Я не знаю, имеет ли это какое-то значение, но я использую проект библиотеки Android и селектор иattr.xml находится в проекте библиотеки.

Спасибо

Обновление Похоже, проблема в том, что проекты библиотеки плохо работают с пользовательскими атрибутами.См. здесь , здесь , здесь .

К сожалению, не было найдено много решений ...

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Я написал этот оригинальный вопрос. IIRC, это было, когда Android был в бета-версии, и все немного изменилось. Пользовательские атрибуты действительно работают; Я использую их. Вам действительно нужен префикс app: для пользовательских атрибутов состояния. Вам также необходимо заменить пакет вашего приложения вместо my.app.package в объявлении xmlns.

1 голос
/ 09 ноября 2014

используйте

xmlns:app="http://schemas.android.com/apk/lib/my.app.package

для атрибутов, объявленных в библиотеке.

...