Подтвердить что ты не робот

Заполнение не влияет на <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>
4b9b3361

Ответ 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

Источники:

Ответ 4

Я решил эту проблему следующим образом:

<shape android:shape="oval"  >
    <stroke android:width="4dp" android:color="@android:color/transparent" />
    <solid android:color="@color/colorAccent" />
</shape>

просто добавил к нему прозрачный ход.