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

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

<?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>

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

изображение

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

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

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

Заранее спасибо!


person Olexii Muraviov    schedule 27.07.2016    source источник
comment
Привет, нашел решение?   -  person Deni Erdyneev    schedule 12.08.2016
comment
Привет, есть решение? Я тоже сталкиваюсь с этой проблемой.   -  person Nizam    schedule 22.09.2016
comment
@Низам к сожалению нет(   -  person Olexii Muraviov    schedule 26.09.2016
comment
Ok. Теперь я использую FrameLayout вместо Drawable.   -  person Nizam    schedule 27.09.2016
comment
Странно..... проверьте stackoverflow.com/questions/26561812/   -  person avinash    schedule 10.01.2017
comment
Вы получили какое-либо решение?   -  person Ravi Makvana    schedule 13.01.2017
comment
Меня интересует отступ 2dp на значке меню, можете ли вы указать желаемый размер всего рисунка и размер dp ic_menu_alert.png? Я бы предположил, что это 24dp   -  person kris larson    schedule 13.01.2017


Ответы (2)


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

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

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

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

образец.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.

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

person Govind    schedule 16.01.2017
comment
Спасибо за ваш ответ:) - person Olexii Muraviov; 24.01.2017
comment
при всем этом не забывайте про scaleType это важно для этого трюка. - person Yuri Misyac; 23.10.2018

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

person toobsco42    schedule 16.01.2017