Заполнение не влияет на <shape> в макете XML
Я пытаюсь установить дополнение в объявлении <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>
Ответы
Ответ 1
Я наконец решил проблему с заполнением.
Таким образом, отступы здесь не будут влиять на форму. Вместо этого вам придется применять прописку в других доступных ресурсах, которые будут использовать ее. Итак, у меня есть drawable, который использует форму и там я делаю следующее:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_below"/>
<item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/>
</layer-list>
Итак, как вы можете видеть во втором элементе <item>
, я устанавливаю padding (верхний и правый). И после этого все работает.
Спасибо.
Ответ 2
Как уже упоминалось в нескольких комментариях, наилучшим подходом является обернуть <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
Источники:
Ответ 3
Ответ Lyobomyr работает, но здесь используется одно и то же решение, но без накладных расходов на создание нового drawable и, следовательно, минимизация файлового беспорядка:
Как добавить дополнение к градиенту <shape> в Android?
Ответ 4
Я решил эту проблему следующим образом:
<shape android:shape="oval" >
<stroke android:width="4dp" android:color="@android:color/transparent" />
<solid android:color="@color/colorAccent" />
</shape>
просто добавил к нему прозрачный ход.