Как добавить отступ к градиенту <shape>в Android? - PullRequest
50 голосов
/ 26 октября 2009

У меня есть форма с градиентом, которую я использую в качестве делителя между ListView элементами. Я определил это следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

<gradient
    android:startColor="#ccd0d3"
    android:centerColor="#b6babd"
    android:endColor="#ccd0d3"
    android:height="1px"
    android:angle="0" />

</shape>

Я хотел бы добавить 6 пикселей отступа по обе стороны от градиента, чтобы он не простирался от края к краю экрана.

Однако, куда бы я ни положил android:left="6px" и android:right="6px", похоже, это не сработает. Я могу поместить его в элемент <shape>, элемент <gradient> или в отдельный <padding> дочерний элемент <shape>, и это ничего не изменит.

Как добавить отступы слева и справа от моего разделителя списка?

Ответы [ 3 ]

135 голосов
/ 28 августа 2010

Полагаю, вы могли бы объединить это так:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <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>
</layer-list>
46 голосов
/ 06 декабря 2012

Другое решение с использованием вставки:

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="6dp"
    android:insetRight="6dp" >

    <shape   
        android:shape="rectangle">

    <gradient
        android:startColor="#ccd0d3"
        android:centerColor="#b6babd"
        android:endColor="#ccd0d3"
        android:height="1px"
        android:angle="0" />

    </shape>

</inset>
22 голосов
/ 26 октября 2009

Похоже, что одним из решений было бы "обернуть" мой объект рисования другим объектом, в котором указан соответствующий отступ.

Например, list_divider.xml будет:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:left="6dp"
        android:right="6dp"
        android:drawable="@drawable/list_divider_inner" />

</layer-list>

И тогда list_divider_inner.xml будет исходным рисунком:

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

<gradient
    android:startColor="#ccd0d3"
    android:centerColor="#b6babd"
    android:endColor="#ccd0d3"
    android:height="1px"
    android:angle="0" />

</shape>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...