我可以画一个线性布局的边界,但它被画在所有的边。我想把它限制在右边,就像你在CSS (border-right:1px solid red;)

我试过了,但还是四面都有:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <shape android:shape="rectangle" >
        <stroke
            android:height="2dp"
            android:width="2dp"
            android:color="#FF0000" />

        <solid android:color="#000000" />

        <padding
            android:bottom="0dp"
            android:left="0dp"
            android:right="1dp"
            android:top="0dp" />

        <corners
            android:bottomLeftRadius="0dp"
            android:bottomRightRadius="5dp"
            android:radius="1dp"
            android:topLeftRadius="5dp"
            android:topRightRadius="0dp" />
    </shape>
</item>

有什么建议吗?

顺便说一句,我不想使用在所需的一侧放置宽度为1dp的视图的hack。


当前回答

这里没有提到9个补丁文件。是的,你必须创建文件,但这是相当简单的工作,它是真正的“跨版本和透明度支持”的解决方案。如果文件被放置到drawable-nodpi目录中,它将以px为基础工作,而在drawable-mdpi中,它将以dp为基础工作(多亏了resample)。

原始问题的示例文件(右边框:1px实红色;)在这里:

http://ge.tt/517ZIFC2/v/3?c

只需将其放置到drawable-nodpi目录。

其他回答

你也可以用一个图层实现你想要的东西

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

    <item
        android:bottom="-5dp"
        android:right="-5dp"
        android:top="-5dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/color_of_the_background" />

            <stroke
                android:width="5dp"
                android:color="@color/color_of_the_border" />
        </shape>
    </item>

</layer-list>

这样,只有左边的边框是可见的,但你可以通过item元素的底部、左边、右边和顶部属性来实现你想要的任何组合

您可以包装到容器中并定义左底上开始的边距。 假设你想为左侧提供空白,你可以这样做

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/light_blue"
    >
    <TextView
        android:marginStart="2dp" // This is Your border
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:padding="16dp"
        android:text="a"
        android:textColor="@color/light_blue"
        android:textSize="25dp" />
</RelativeLayout>

若要在可绘制对象的一侧绘制边框,请对其他3条边应用负插入(导致这些边框被绘制到屏幕外)。

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

    <shape android:shape="rectangle">
        <stroke android:width="2dp" android:color="#FF0000" />
        <solid android:color="#000000" />
    </shape>

</inset>

这个方法类似于naykah的答案,但是没有使用层列表。

不同颜色的边框。我用了3个项目。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/colorAccent" />
        </shape>
    </item>
    <item android:top="3dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/light_grey" />
        </shape>
    </item>
    <item
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorPrimary" />
        </shape>
    </item>
</layer-list>

这里没有提到9个补丁文件。是的,你必须创建文件,但这是相当简单的工作,它是真正的“跨版本和透明度支持”的解决方案。如果文件被放置到drawable-nodpi目录中,它将以px为基础工作,而在drawable-mdpi中,它将以dp为基础工作(多亏了resample)。

原始问题的示例文件(右边框:1px实红色;)在这里:

http://ge.tt/517ZIFC2/v/3?c

只需将其放置到drawable-nodpi目录。