Как установить допустимый размер в списке слоев
У меня проблема с настройкой размера отрисовки в списке слоев. Мой 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>
Ответы
Ответ 1
Вы можете использовать параметры android: width и android: height с желаемыми значениями.
Ниже приведен пример нарисованного списка слоев и снимок экрана. Я использовал векторную графику из Google значков материалов и собственный селектор для рисования.
Исходная нарисованная форма circle.xml имеет размер 100dp x 100dp, но в drawable.xml я переопределяю эти значения на 24dp x 24dp с помощью параметров android: width и android: height.
Я надеюсь, что это поможет!
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]()
Ответ 2
Для этого вы можете использовать тег вставки.
Например
<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>
Это создаст paddings вокруг вас menu_drawable2, чтобы он не масштабировался. Просто установите необходимые размеры.
Ответ 3
Похоже, у меня есть половина решения, используя "левый" и "правый", но все же это не позволяет мне автоматически устанавливать точный размер изображения. Теперь мой 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
Надеюсь, это поможет: -
Вы можете использовать девять патчей для menu_drawable2
. Вы можете сделать menu_drawable2
похожим на прозрачную область вокруг краев. Используйте эту прозрачную область, чтобы указать растягиваемую область в девяти патчах.
Ответ 5
Я также сталкивался с проблемой на Android 5.0 (API 21). Похоже, gravity
из item
не работает для API менее 23. Таким образом, макет требуется обновить, я сделал его совместимым, применив вычисленные отступы для второго узла элемента, который должен быть наложенным по правому верхнему углу наложения.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_svg_filter_black"/>
<item
android:left="16dp"
android:right="0dp"
android:top="0dp"
android:bottom="16dp"
android:drawable="@drawable/ic_circle_dot_red"
/>
</layer-list>
Ответ 6
Я не знаю его работ или нет, но вы пытались отделить их друг от друга?
что-то вроде этого:
<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.