Shape drawable in layer-list отображается неправильно для API ниже 23
вчера я переключился на Android Studio версии 2.1.3. Сегодня я снова открыл один из своих проектов и попытался добавить некоторые drawables списка слоев для использования с ImageView
. Например это:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="80px" android:height="80px"
android:top="0px" android:left="0px"
android:right="0px" android:bottom="0px">
<shape android:shape="rectangle">
<solid android:color="@color/deep_orange"/>
</shape>
</item>
<item android:width="60px" android:height="60px"
android:top="10px" android:left="10px"
android:right="10px" android:bottom="10px">
<shape android:shape="oval">
<solid android:color="@color/light_yellow"/>
</shape>
</item>
</layer-list>
это то, что я использовал, чтобы получить перед обновлением моей версии Android Studio, и это то, что я получаю сейчас в предварительном просмотре, если я выберу 23 как "Android-версию для использования при рендеринге макетов в IDE".
, если я выберу любую версию ниже 23, я получу только квадрат:к сожалению, я также не получаю ничего, кроме квадрата при запуске приложения на эмуляторе (Lollipop 22) или устройстве (Jellybean 18).
на всякий случай это полезно:
- compileSdkVersion 23
- buildToolsVersion "23.0.3"
- minSdkVersion 11
- targetSdkVersion 23
- ничего buildType debug
- зависимости: compile ' com.андроид.поддержка:совместимости приложений-В7:23.0.1'
- the
Activity
выходитAppCompatActivity
Я думаю, что проблема как-то связанная с использованием top
, left
, right
и bottom
для верхнего слоя. Потому что, если я просто помещаю круг поверх квадрата, предварительный просмотр, а также "реальная вещь" работают так, как ожидалось для всех уровней API.
редактировать я также начал совершенно новый проект с тем же кодом / xml и следующий (автоматически созданный)build.gradle
:
- compileSdkVersion 24
- buildToolsVersion "24.0.2"
- minSdkVersion 15
- targetSdkVersion 24
- ничего для отладки buildType
- зависимости: compile ' com.андроид.поддержка:совместимости приложений-В7:24.2.0'
- the
Activity
выходитAppCompatActivity
то же самое поведение здесь: верхний слой не отображается для API leves top, left
, right
и bottom
С ценностями != 0.
Итак, мой вопрос: как я могу создать фигурные чертежи "со вставками" для всех уровней API с помощью Android Studio 2.1.3?
1 ответов
прежде всего, я хотел бы поблагодарить @pskink за помощь в анализе проблемы:)
xml в вопросе работал для уровня API 23+, потому что
можно установить ширину и высоту прямо в теге "item"
как @Android разработчик государства это так пост
он не работал для более низких версий, потому что там нужно установить width
и height
атрибуты для ShapeDrawable
С помощью size
тег.
Я полагаю, что Android нужен размер, чтобы выяснить, как масштабировать drawable (- >соотношение сторон!) с учетом вставок (сверху, слева, справа, снизу).
и, как это иногда бывает с деформированным (для определенного уровня API) xml, Android не удалось молча и просто не рисовать форму.
таким образом, решение:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="80px" android:height="80px"
android:top="0px" android:left="0px"
android:right="0px" android:bottom="0px">
<shape android:shape="rectangle">
<solid android:color="@color/deep_orange"/>
</shape>
</item>
<item android:width="60px" android:height="60px"
android:top="10px" android:left="10px"
android:right="10px" android:bottom="10px">
<shape android:shape="oval">
<solid android:color="@color/light_yellow"/>
<size android:height="60px" android:width="60px"/>
</shape>
</item>
</layer-list>