Встроенное определение рисунков, отличных от растровых, в XML-элементах LayerList или LevelList

Документация по спецификации ресурсов XML для LayerList и В чертежах LevelList указано, что элемент item будет принимать только bitmap как дочерний элемент. В некоторых ответах относительно списков уровней я вижу, что люди добавляют shape теги как дочерние теги item. Я попробовал следующее, и, похоже, это работает хорошо.

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:maxLevel="0">
    <shape android:shape="rectangle">
      <solid android:color="#ff0000" />
    </shape>
  </item>
  <item android:maxLevel="1">
    <shape android:shape="oval">
      <solid android:color="#0000ff" />
    </shape>
  </item>
</level-list>

Вот мой вопрос. Это где-нибудь задокументировано, или мне следует избегать такой конструкции, потому что она поддерживается не во всех версиях API, или документация просто неполная, а приведенное выше совершенно законно?

Чтобы уточнить, я знаю, что могу указать любой вид рисования, используя отдельные файлы ресурсов и ссылаясь на них с помощью атрибута android:drawable. Вопрос относится к встроенной спецификации произвольных рисунков в XML списка слоев или списка уровней.


person mikail sheikh    schedule 08.01.2014    source источник


Ответы (2)


В нем не указано, что он принимает только Bitmap объектов, но что он их примет. Вы можете использовать android:drawable для указания drawable. Соберите свои фигуры в их собственные XML-определения, которые можно рисовать, и ссылайтесь на них в списке уровней.

person Larry Schiefer    schedule 08.01.2014
comment
Я знаю, что могу указать любой вид рисования, используя атрибут android:drawable. Мой вопрос относится к спецификации XML. Могу ли я указать фигуры (или другие чертежи в этом отношении) внутри тега элемента. это означает, что я не создаю несколько ресурсов для каждого уровня или слоя. - person mikail sheikh; 08.01.2014
comment
Вы правы в том, что документация не совсем ясна, за исключением того, что в ней говорится, что любой дочерний элемент ‹code›‹selector›‹/code› будет работать. - person Larry Schiefer; 09.01.2014
comment
Нет, это не совсем правильно. В документации <level-list> указано, что <item> должен быть потомком элемента <selector>. Это явно неправильно, потому что <selector> определяет StateListDrawable, а <level-list> определяет LevelListDrawable. В документации также указано, что <item> принимает дочерние элементы <bitmap>. Хотя это верно, это неполно. По-видимому, он также может принимать дочерние элементы <shape>. Я просто хотел знать, безопасно ли это для меня или могут быть какие-то несовместимости в некоторых версиях API. - person mikail sheikh; 09.01.2014

Ответ ДА, это разрешено и поддерживается.

Хотя это не задокументировано, теги, отличные от растровых изображений, используются в официальных ресурсах Android XML. Например, источник progress_large_holo.xml содержит следующее.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
             android:drawable="@drawable/spinner_76_outer_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="0"
             android:toDegrees="1080" />
    </item>
    <item>
        <rotate
             android:drawable="@drawable/spinner_76_inner_holo"
             android:pivotX="50%"
             android:pivotY="50%"
             android:fromDegrees="720"
             android:toDegrees="0" />
    </item>
</layer-list>

Другие источники также показывают, что любой XML, который принимается в качестве ресурса для рисования, может быть помещен в теги item.

person mikail sheikh    schedule 10.02.2014