Я пытаюсь установить отступ в <shape>
объявлении в файле / макете XML. Но что бы я ни установил, с отступом ничего не меняется. Если я изменю какие-либо другие свойства, я увижу их влияние на пользовательский интерфейс. Но это не работает с заполнением. Не могли бы вы посоветовать возможные причины, по которым это могло произойти?
Вот форма XML, которую я пытаюсь стилизовать:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp"
android:color="#ffffff"
android:dashWidth="2dp"/>
<solid android:color="@color/button_white_cover"/>
<corners android:radius="11dp"/>
<padding android:left="1dp"
android:top="20dp"
android:right="20dp"
android:bottom="2dp"/>
</shape>
источник
<item>
принимает дочерние чертежи (хотя это явно не документировано). Вот как вы можете добиться такого поведения в одном xml.<shape><padding>
для чего ?Как упоминалось в нескольких комментариях, лучший подход - обернуть его
<shape>
в<item>
элемент и вместо этого установить отступы. Однако есть и другие варианты, которые подробно описаны по ссылке ниже. например<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:left="8dp" android:right="8dp" android:top="8dp" android:bottom="8dp"> <shape android:shape="rectangle"> ... </shape> </item> </layer-list>
В зависимости от ваших потребностей, вместо использования списка слоев, вы можете использовать любой из следующих доступных типов:
Дополнительные сведения о доступных типах с возможностью рисования см. В этой документации по Android.
Источники:
источник
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
Вы можете попробовать вставки:
<?xml version="1.0" encoding="UTF-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetBottom="2dp" android:insetLeft="1dp" android:insetRight="20dp" android:insetTop="20dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="#ffffff" android:dashWidth="2dp" /> <solid android:color="@color/button_white_cover" /> <corners android:radius="11dp" /> </shape> </inset>
источник
Ответ Lyobomyr работает, но здесь применяется то же самое решение, но без накладных расходов на создание нового объекта для рисования, что минимизирует беспорядок в файлах:
https://stackoverflow.com/a/3588976/578746
Скопируйте / вставьте anwser анонсом в ответ SO выше:
<item android:left="6dp" android:right="6dp"> <shape android:shape="rectangle"> <gradient android:startColor="#ccd0d3" android:centerColor="#b6babd" android:endColor="#ccd0d3" android:height="1px" android:angle="0"/> </shape> </item>
источник
Я решил эту проблему так:
<shape android:shape="oval" > <stroke android:width="4dp" android:color="@android:color/transparent" /> <solid android:color="@color/colorAccent" /> </shape>
просто добавил к нему прозрачную обводку.
источник