Подтвердить что ты не робот

Неверный размер элементов в списке слоев на прелелипополе

У меня есть список слоев

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:right="2dp" android:left="2dp" android:bottom="2dp" android:top="2dp">
    <bitmap
        android:gravity="center"
        android:src="@drawable/ic_menu_alert"/>
</item>

<item android:height="10dp" android:width="10dp" android:gravity="right|top">
    <shape android:shape="oval">
        <size android:height="10dp" android:width="10dp"/>
        <solid android:color="@color/navigation_drawer_notification_red_color"/>
    </shape>
</item>

</layer-list>

который показывает это изображение

image

На леденец и выше все отлично, но на красном круге перед лелепипом теряются все атрибуты калибровки и заполнения, и изображение выглядит так:

введите описание изображения здесь

Я искал решение около 3 дней и ничего не нашел. Я пытался создать свой собственный макет панели инструментов и установить для этого образаbuuton scaleType = "centerInside", но это не помогло. Может ли кто-нибудь помочь в решении этой проблемы?

Спасибо заранее!

4b9b3361

Ответ 1

Лучше не упоминать атрибуты height и width в layer-list. Когда вы используете это как возможно, скажем, ImageView (ширина и высота ImageView будут переопределять значение, указанное в элементе/форме).

Вы можете использовать top, bottom, left, right для выравнивания ваших элементов в списке слоев.

Примечание: атрибуты высоты и ширины элемента поддерживаются только с API 23.

Вот рабочий пример (протестирован в Android 7.0 и Android 4.4):

sample.xml

<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/menu"
        android:left="16dp"
        android:right="16dp"
        android:gravity="center">
        <bitmap
            android:src="@drawable/menu_icon" />
    </item>

    <item
        android:top="8dp"
        android:left="56dp"
        android:right="24dp"
        android:bottom="42dp">
        <shape android:shape="oval">
            <solid android:color="@android:color/holo_red_dark"/>
        </shape>
    </item>

</layer-list>

main.xml

<ImageView
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:src="@drawable/sample"
        android:scaleType="fitCenter"/>

Вы также можете использовать wrap_content для высоты и ширины в ImageView.

введите описание изображения здесь

Ответ 2

Итак, я придумал подходящее решение. У меня есть список слоев, доступных в /drawable и /drawable-v21. Перечисленный в /drawable-v21 список слоев содержит вектор, пригодный для рисования. Выделенный в /drawable список слоев содержит .png. Это как бы поражает цель использования векторных чертежей, но я должен был сделать это, чтобы он работал в этом случае.