Как установить размер для рисования в списке слоев - PullRequest
29 голосов
/ 18 августа 2011

У меня проблема с настройкой размера отрисовки в списке слоев.Мой XML выглядит следующим образом:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/menu_drawable1"/>
    <item android:drawable="@drawable/menu_drawable2"/>       
</layer-list>

Drawable1 больше, чем Drawable2, поэтому размер Drawable2 изменяется.Как это переопределить и установить оригинальный размер Drawable2?Я не хочу, чтобы это изменило размеры.Я пытался установить ширину и высоту, но это не работает.Кроме того, элементы рисования на самом деле не являются растровыми изображениями, это селекты, поэтому я не могу использовать растровый трюк.правильно ", но тем не менее, это не позволяет мне автоматически устанавливать точный размер изображения.Теперь мой XML выглядит так:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/menu_drawable1"/>
    <item android:drawable="@drawable/menu_drawable2" android:right="150dp"/>       
</layer-list>

Ответы [ 4 ]

5 голосов
/ 15 августа 2016

Вы можете использовать android: ширина и android: высота параметры с желаемыми значениями.

Ниже приведен пример нарисованного списка слоев и снимок экрана.Я использовал векторную графику из Google иконки материалов и собственный селектор рисования.

Оригинальная нарисованная форма circle.xml имеет размер 100dp x 100dp, но в drawable.xml Я переопределяю эти значения на 24dp x 24dp android: ширина и android: высота параметры.

Я надеюсь, что это поможет!

drawable.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/circle" android:height="24dp" android:width="24dp"/>
    <item android:drawable="@drawable/ic_accessibility_black_24dp"/>
    <item android:drawable="@drawable/ic_http_white_24dp" android:gravity="center" android:top="-3dp" android:height="5dp" android:width="5dp"/>
</layer-list>

circle.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:innerRadius="20dp" android:shape="oval">
            <solid android:color="#CCC" />
            <size android:width="100dp" android:height="100dp"/>
        </shape>
    </item>
</selector>

screen shot

3 голосов
/ 23 мая 2016

Для этого вы можете использовать встроенный тег. Например

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/menu_drawable1"/>
   <item>
       <inset android:drawable="@drawable/menu_drawable2"
           android:insetRight="50dp"
           android:insetTop="50dp"
           android:insetLeft="50dp"
           android:insetBottom="50dp" />
   </item>

Это создаст отступы вокруг вас menu_drawable2, поэтому он не будет масштабироваться. Просто установите необходимые размеры.

0 голосов
/ 16 ноября 2016

Я не знаю, как это работает или нет, но вы пытались отделить их друг от друга?

как то так:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/menu_drawable1"/>
</layer-list>
<layer-list>
    <item android:drawable="@drawable/menu_drawable2"/>       
</layer-list>

или поместите что-нибудь еще между ними, как пустой макет с высотой и шириной 0dp.

0 голосов
/ 30 сентября 2015

Надеюсь, это поможет: -
Вы можете использовать девять патчей для menu_drawable2. Вы можете сделать menu_drawable2 как иметь прозрачную область вокруг его краев. Используйте эту прозрачную область, чтобы указать растягиваемую область в девять патчей.

...