Android: обводка в форме создает запас ширины обводки - PullRequest
16 голосов
/ 23 января 2012

Я создал прямоугольник, чтобы использовать его в качестве фона элемента списка. Моя проблема в том, что обводка не следует за границей вида, но допускает запас +/- ширины обводки.

Вот xml моей фигуры:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadiusRatio="1"
    android:shape="rectangle" >
    <solid android:color="@color/deminoir" />
    <stroke
        android:width="4dp"
        android:color="@color/deminoir" />
    <padding
        android:bottom="4dp"
        android:left="4dp"
        android:right="4dp"
        android:top="4dp" />
</shape>

А вот XML моего стиля:

<style name="champ">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:orientation">vertical</item>
    <item name="android:background">@drawable/bordurechamp</item>
</style>

И, наконец, xml моего представления списка:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/champ" >


    <!-- titre -->
    <TextView
        android:id="@+id/titre"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/deminoir"
        android:padding="5dip"
        android:text="titre"
        android:textAppearance="@android:style/TextAppearance.Large" />

    <!-- Contenu -->
    <TextView
        android:id="@+id/valeur"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:padding="5dip"
        android:text="valeur"
        android:textAppearance="@android:style/TextAppearance.Medium"
        />

</LinearLayout>

Ответы [ 3 ]

26 голосов
/ 23 декабря 2017

Окружите свои shape тегами <item>...</item> и установите top, bottom, left и right атрибуты <item> с необходимыми значениями полей .Затем оберните все item <layer-list>.См. Ниже:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="{L-Margin}dp"
        android:right="{R-Margin}dp"
        android:bottom="{B-Margin}dp"
        android:top="{T-Margin}dp">

        <!-- Insert your shape here: -->
        <shape android:shape="...">  
            ...
        </shape>

    </item>
</layer-list>

Также, если вам нужно padding (вместо margin), см. Ответ Ахмада Агхазаде ниже.

6 голосов
/ 16 декабря 2016

Вы можете использовать прозрачный отступ вместо поля

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/listview_background_shape">
    <stroke 
        android:width="8dp" 
        android:color="#0000000" />
    <padding 
        android:left="2dp"
        android:top="2dp"
        android:right="2dp"
        android:bottom="2dp" />

    <solid 
        android:color="@color/white" />
</shape>
3 голосов
/ 06 ноября 2015

У меня была такая же проблема, и я решил ее так:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape
            android:shape="rectangle">
            <solid android:color="@color/background" />
            <corners android:radius="2dp"/>
            <stroke
                android:width="4dp"
                android:color="@android:color/black" />
        </shape>
    </item>
    <item>
        <shape
            android:shape="rectangle">
            <corners android:radius="2dp"/>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="2dp"
                android:color="@color/background" />
        </shape>
    </item>
</layer-list>

Это дает два рисования с двумя штрихами. Первый рисующий имеет обводку шириной (ширина + поле желаемого обводки). У второго рисованного есть только видимый ход с шириной желаемого поля.

...