Списък със слоеве на XML на Android: Как да позиционирате горния слой

Имам този XML чертеж - tab_background_unselected:

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

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/background_grey" />            
        </shape>
    </item>

</layer-list>

което създава тази форма:

фонов правоъгълник

и тази форма на стрелка xml чертеж - tab_selected_arrow:

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

    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%"
            android:toDegrees="45" >
            <shape android:shape="rectangle" >
                <solid android:color="@color/background_dark_green" />
            </shape>
        </rotate>
    </item>

</layer-list>

което създава тази форма:

триъгълник на горния слой

Използвам този XML с възможност за рисуване (вместо PNG файл), за да създам списък със слоеве:

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

    <item android:drawable="@drawable/tab_background_unselected">
    </item>
    <item android:drawable="@drawable/tab_selected_arrow">
    </item>

</layer-list>

но искам крайното изображение да изглежда така:

окончателно изображение

Не знам как да настроя гравитацията на стрелката (втория елемент и най-горния слой) в центъра|отдолу... Опитах да използвам маркер bitmap, но той приема само файлове с изображения.

Имам нужда това да бъде XML чертеж, защото

  1. Трябва да е в селектор с възможност за изтегляне
  2. Не искам да го правя PNG и да създавам различен файл за всяка резолюция на екрана

person Asaf Nevo    schedule 14.10.2013    source източник


Отговори (1)


Използвайте вътрешен Bitmap чертеж вътре в item и задайте gravity за него:

<item android:drawable="@drawable/tab_background_unselected">
</item>
<item>
    <bitmap
        android:gravity="bottom|center_horizontal"
        android:src="@drawable/tab_selected_arrow" />
</item>
person marmor    schedule 25.11.2013
comment
Asaf каза, че е опитал с Bitmap drawables и е прав: те не позволяват XML drawables (току-що коригирах въпроса и сега се появява маркерът за bitmap в I've tried using...) - person Jose_GD; 06.03.2014
comment
AFAIK няма начин, има грешка в API 21-22, тук няма vectros в растерния елемент :( - person djdance; 05.08.2016
comment
Трябва да се подчертае повече: този отговор работи само когато tab_selected_arrow е .png!!! - person superuser; 26.06.2017