如何在线性布局的一侧绘制边框?

Nit*_*sal 181 android

我能够将边框绘制成线性布局,但它会在各个方面绘制.我想将它限制在右侧,就像你在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>
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一目标的任何建议?

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

Viv*_*wal 354

您可以使用它来获取一侧的边框

<?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="#FF0000" />
    </shape>
</item>
<item android:left="5dp">
    <shape android:shape="rectangle">
        <solid android:color="#000000" />
    </shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

EDITED

包括我在内的很多人想要一个带透明背景的单边边框,我实现了一个BorderDrawable可以给我边框不同大小和颜色的边框,就像我们使用css一样.但这不能通过xml使用.为了支持XML,我添加了一个BorderFrameLayout可以包装布局的文件.

请参阅我的github以获取完整的来源.

  • 如果你想要一个带有底部边框的基于alpha的稳定颜色怎么办?我一直在考虑用Android Drawable XML api解决这个问题,但我无法弄明白. (5认同)

Ode*_*ner 228

像馅饼一样简单,允许透明的bg:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="0"
        android:startColor="#f00"
        android:centerColor="@android:color/transparent"
        android:centerX="0.01" />
</shape>
Run Code Online (Sandbox Code Playgroud)

更改角度以更改边框位置:

  • 0 =离开
  • 90 =底部
  • 180 =对
  • 270 =顶部

  • 这是迄今为止最好的答案,太糟糕了,它没有被投票 (18认同)
  • 很好,但我当然不会把它描述为"像馅饼一样简单". (11认同)
  • 如果您需要更粗的边框或者您需要多边的边框,这不起作用. (7认同)
  • 如何调整描边或边框宽度? (2认同)

小智 98

也可以使用单个层实现所需的功能

<?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>
Run Code Online (Sandbox Code Playgroud)

这样,只有左边框是可见的,但你可以通过打达到你想要的任意组合bottom,left,righttop该属性的item元素

  • 当你有其他背景颜色并且想要用边框覆盖这个可绘制的bg时,这非常有用.(y)的 (3认同)
  • 正是我需要的,但使用负填充是否正确? (3认同)

tro*_*per 75

要在drawable的一侧获得边框inset,请将阴影应用于其他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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这种方法类似于naykah的答案,但没有使用layer-list.

  • 这是IMO的最佳答案 (4认同)
  • 注意:这将移动您的视图内容并调整其大小。小心使用。 (2认同)

Muk*_*las 19

另一个很好的例子 例子

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

     <shape android:shape="rectangle">
         <corners
             android:bottomLeftRadius="4dp"
             android:bottomRightRadius="0dp"
             android:topLeftRadius="4dp"
             android:topRightRadius="0dp" />
         <stroke
             android:width="1dp"
             android:color="@color/nasty_green" />
         <solid android:color="@android:color/transparent" />
     </shape>

</inset>
Run Code Online (Sandbox Code Playgroud)


小智 7

作为替代方案(如果您不想使用背景),您可以通过如下视图轻松完成:

<View
    android:layout_width="2dp"
    android:layout_height="match_parent"
    android:background="#000000" />
Run Code Online (Sandbox Code Playgroud)

要仅使用右边框,请将其放置在布局之后(您想要有边框):

<View
    android:layout_width="2dp"
    android:layout_height="match_parent"
    android:background="#000000" />
Run Code Online (Sandbox Code Playgroud)

要仅具有左边框,请将其放置在布局(您要使用边框的位置)之前:

为我工作......希望它有一些帮助....


小智 6

我能够通过以下代码实现效果

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:left="0dp" android:right="-5dp" android:top="-5dp" android:bottom="-5dp">
        <shape
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#123456" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

您可以通过改变位移方向来调整您对边界位置的需求


小智 5

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#f28b24" />
            <stroke
                android:width="1dp"
                android:color="#f28b24" />
            <corners
                android:radius="0dp"/>
            <padding
                android:left="0dp"
                android:top="0dp"
                android:right="0dp"
                android:bottom="0dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#f28b24"
                android:endColor="#f28b24"
                android:angle="270" />
            <stroke
                android:width="0dp"
                android:color="#f28b24" />
            <corners
                android:bottomLeftRadius="8dp"
                android:bottomRightRadius="0dp"
                android:topLeftRadius="0dp"
                android:topRightRadius="0dp"/>
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)