15

我有:

<stroke android:width="1px" android:color="#A6ACB1"/>

我想从元素的底部(例如)删除这个边框。可能吗?(Eclipse 只建议我:颜色、宽度、dashWidth 和 dashGap)。

4

3 回答 3

29

这有点小技巧inset,但可以使用带有负值的可绘制对象来删除一个或多个边框。将形状包裹在 an 中inset并应用负android:insetTop, android:insetBottom, android:insetLeft, 或android:insetRightabs 值等于笔划宽度。

在此处输入图像描述

例如,要从带有笔划的矩形中删除底部边框,请4dp使用android:insetBottom.-4dp

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="-4dp">

    <shape android:shape="rectangle">
        <solid android:color="#FFFFFF" />
        <stroke android:width="4dp" android:color="#000000" />
        <corners android:radius="4dp" />
    </shape>

</inset>

只要形状的角的半径小于等于笔划宽度,这似乎工作得很好。否则,在应用插图时使用两个值中较大的一个(半径),以完全隐藏相邻边框的圆形部分。

于 2015-01-03T21:21:03.070 回答
27

据我了解,没有一种简单的方法可以做到这一点。但是,如果您将 layer-list 与具有边框的项目一起使用,然后将其与您希望边框等于边框宽度的所有边的偏移量不存在的项目一起使用,则可以实现。

让我为您制作代表无边界底部的 xml..

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Border -->
    <item>
        <shape>
            <solid android:color="#f000"></solid>
        </shape>
    </item>
    <!-- Body -->
    <item android:left="2dip"
          android:top="2dp"
          android:right="2dp">
        <shape>
            <solid android:color="#ffafafaf"></solid>
        </shape> 
    </item>
</layer-list>

正如你所看到的,我告诉第二个项目在除底部之外的所有侧面由两个 dp 插入第一个项目(因此底部的无边框结果),你去:

在此处输入图像描述

所以本质上这不是一个边框本身,它是下面的形状(尽管如果你需要虚线或点线或其他任何东西,你可以添加一个边框)被第二个项目覆盖,它将是按钮的主体。都在同一个drawable中:)

这可以应用于您要删除的任何边框,方法是更改​​该项目插入的值,例如,如果我right将 Body 项目中的 更改为bottom,则缺少的边框将是正确的,因为它是没有插入的

于 2012-05-13T10:47:06.680 回答
1

这是一个xml技巧。首先,您必须使用特定颜色(线条颜色)填充图层。然后你必须用另一种颜色(背景颜色)填充它,同时将绘图从你想要画线的一侧推一点。这是我的代码:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

        <!-- First we have to create the line color (Black: #000000 and
           Set position to 0 from all sides, this will allow us
           even to to determine border size in any side (top,
           right, bottom, left) -->

    <item android:top="0dp"
        android:right="0dp"
        android:left="0dp"
        android:bottom="0dp">
        <shape android:shape="rectangle">
            <solid android:color="#000000"></solid>
        </shape>
    </item>

    <!-- Here we fill the content with our color, and I will
         push 1dp from the top so this size (top = 1dp) will
         keep the previous color and it will look like the border
         -->

    <item android:top="1dp"
        android:right="0dp"
        android:left="0dp"
        android:bottom="0dp">
        <shape android:shape="rectangle">
            <solid android:color="#f4f4f4"></solid>
        </shape>
    </item>
</layer-list>

https://i.stack.imgur.com/ifak8.jpg

它的外观如下:

在此处输入图像描述

于 2018-02-02T16:08:28.757 回答