有没有一种简单的方法可以在Android视图的顶部和底部添加边框?

有没有一种简单的方法可以在Android视图的顶部和底部添加边框?,android,border,android-view,textview,Android,Border,Android View,Textview,我有一个文本视图,我想沿其顶部和底部边框添加一个黑色边框。我尝试将android:drawableTop和android:drawabletown添加到文本视图中,但这只会导致整个视图变为黑色 <TextView android:background="@android:color/green" android:layout_width="fill_parent" android:layout_height="wrap_content" android:dr

我有一个文本视图,我想沿其顶部和底部边框添加一个黑色边框。我尝试将
android:drawableTop
android:drawabletown
添加到文本视图中,但这只会导致整个视图变为黑色

<TextView
    android:background="@android:color/green"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:drawableTop="@android:color/black"
    android:drawableBottom="@android:color/black"
    android:text="la la la" />


有没有一种方法可以在Android中轻松地为视图(特别是文本视图)添加上下边框?

您也可以将视图包装到框架布局中,然后将框架的背景色和填充设置为所需;但是,默认情况下,textview具有“透明”背景,因此您也需要更改textview的背景颜色。

在android 2.2中,您可以执行以下操作

创建一个xml可绘制文件,如/res/drawable/textlines.xml,并将其指定为TextView的后台属性

<TextView
android:text="My text with lines above and below"
android:background="@drawable/textlines"
/>
<?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="#DDDD00" /> <!-- border color -->
        </shape>
    </item>

    <item
        android:bottom="1dp" 
        android:top="1dp">   <!-- adjust borders width here -->
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />  <!-- background color -->
        </shape>
    </item>
</layer-list>

/res/drawable/textlines.xml

<?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:width="1dp" android:color="#FF000000" />
            <solid android:color="#FFDDDDDD" />

        </shape>
   </item>

   <item android:top="1dp" android:bottom="1dp"> 
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#FFDDDDDD" />
            <solid android:color="#00000000" />
        </shape>
   </item>

</layer-list>


缺点是你必须指定不透明的背景色,因为透明胶片不起作用。(至少我认为他们这样做了,但我错了)。在上面的示例中,您可以看到第一个形状的纯色#FFdddddd复制为第二个形状的笔划颜色。

尝试使用线性布局包装图像,并将其背景设置为文本周围所需的边框颜色。然后将textview上的填充设置为您想要的边框厚度。

首先创建一个包含以下内容的xml文件,并将其命名为border.xml,然后将其放置在res目录中的布局文件夹中

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="1dp" android:color="#0000" />
    <padding android:left="0dp" android:top="1dp" android:right="0dp"
        android:bottom="1dp" />
</shape>

这将在文本视图的顶部和底部形成一条黑线。

您也可以使用9路径来完成工作。创建它,使彩色像素不在高度上相乘,而只在透明像素上相乘。

我使用了一个技巧,使边框显示在容器外部。使用此技巧,只绘制一条线,以便显示基础视图的背景

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

            <solid android:color="#00FFFFFF" />

            <padding android:left="10dp"
                android:right="10dp"
                android:top="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

</layer-list>

选项1:可拉伸形状 如果要在布局或视图周围设置边框,可以在其中设置背景,这是最简单的选项。在
drawable
文件夹中创建一个如下所示的XML文件:

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

    <solid android:color="#8fff93" />

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

</shape>
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>
如果您想知道,它确实适用于
adjustViewBounds=true
。但是,如果您想在整个
相对论视图中有一个背景,那么它是不起作用的,因为有一个bug阻止您使用
视图填充
相对论视图。在这种情况下,我推荐
形状
可绘制

选项3:9-patch 最后一个选项是使用9-patch可绘制,如下所示:

您可以在任何可以设置
android:background=“@drawable/…”
的视图上使用它。是的,它确实需要是6x6-我试过5x5,但不起作用

这种方法的缺点是你不能很容易地改变颜色,但是如果你想要花哨的边框(例如,在这个问题中,只有顶部和底部的边框),那么你可能无法使用
形状
可绘制,这不是很强大

选项4:额外视图 我忘了提到这个非常简单的选项,如果你只想在你的视图上方和下方添加边框。您可以将视图置于垂直
线性布局中(如果尚未设置),然后在其上方和下方添加空的
视图,如下所示:

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

    <solid android:color="#8fff93" />

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

</shape>
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>

我的答案基于@Emile版本,但我使用透明颜色而不是纯色。
此示例将绘制一个2dp底边框

<?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:width="2dp"
                     android:color="#50C0E9" />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
    <item  android:bottom="2dp" >
        <shape android:shape="rectangle" >
            <stroke  android:width="2dp"
                     android:color="@color/bgcolor" />
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</layer-list>
或者将它们组合为具有两个或多个边框:

android:bottom="2dp" android:top="2dp"


只需在要添加边框的文本下方添加此文本视图,因此我想做一些稍微不同的事情:仅在底部添加边框,以模拟ListView分隔符。我修改了Piet Delport的答案,得到了以下结论:

<?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/background_trans_light" />    

        </shape>
   </item>

    <!-- this mess is what we have to do to get a bottom border only. -->
   <item android:top="-2dp"
         android:left="-2dp"
         android:right="-2dp"
         android:bottom="1px"> 
      <shape 
        android:shape="rectangle">    
            <stroke android:width="1dp" android:color="@color/background_trans_mid" />
            <solid android:color="@null" />
        </shape>
   </item>

</layer-list>


请注意,使用px而不是dp可以精确获得1个像素分割线(某些手机DPI会使1dp线消失)。

为什么不创建一个带有背景色的1dp高视图?然后它可以很容易地放在您想要的地方。

//只需在图像视图或视图周围添加边框即可
// Just simply add border around the image view or view

<ImageView
                android:id="@+id/imageView2"
                android:layout_width="90dp"
                android:layout_height="70dp"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:layout_toLeftOf="@+id/imageView1"
                android:background="@android:color/white"
                android:padding="5dip" />

// After that dynamically put color into your view or image view object

objView.setBackgroundColor(Color.GREEN);

//VinodJ/Abhishek
//之后,动态地将颜色添加到视图或图像视图对象中 objView.setBackgroundColor(Color.GREEN); //维诺吉/阿披舍克
正如@Nic Hubbard所说,有一种非常简单的方法可以添加边界线

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#000000" >
</View>

您可以根据需要更改高度和背景色。

写下下面的代码

<View
    android:layout_width="wrap_content"
    android:layout_height="2dip"
    android:layout_below="@+id/topics_text"
    android:layout_marginTop="7dp"
    android:layout_margin="10dp"
    android:background="#ffffff" />

只需将我的解决方案添加到列表中即可

我想要一个半透明的底部边框,它延伸到原始形状之外(因此半透明边框在父矩形之外)


这给了我


若要仅在底部添加
1dp
白色边框,并具有透明背景,您可以使用以下比此处大多数答案更简单的选项

对于
文本视图
或其他视图,添加:

android:background="@drawable/borderbottom"
drawable
目录中添加以下XML,称为
borderbottom.XML

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-2dp" android:left="-2dp" android:right="-2dp">
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#ffffffff" />
            <solid android:color="#00000000" />
        </shape>
    </item>
</layer-list>

如果要在顶部添加边框,请将
android:top=“-2dp”
更改为
android:bottom=“-2dp”

颜色不需要是白色,背景也不需要是透明的

可能不需要
实心
元件。这将取决于您的设计(感谢V.Kalyuzhnyu)

基本上,这个XML将使用矩形形状创建一个边框,但随后将顶部、右侧和左侧推到形状的渲染区域之外。这样只剩下底部边框可见。

要更改
android:background="@drawable/borderbottom"
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-2dp" android:left="-2dp" android:right="-2dp">
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#ffffffff" />
            <solid android:color="#00000000" />
        </shape>
    </item>
</layer-list>
<TextView
    android:text="My text"
    android:background="@drawable/top_bottom_border"/>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:angle="270"
                android:startColor="#000"
                android:centerColor="@android:color/transparent"
                android:centerX="0.01" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:angle="90"
                android:startColor="#000"
                android:centerColor="@android:color/transparent"
                android:centerX="0.01" />
        </shape>
    </item>
</layer-list>
<?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="#DDDD00" /> <!-- border color -->
        </shape>
    </item>

    <item
        android:bottom="1dp" 
        android:top="1dp">   <!-- adjust borders width here -->
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />  <!-- background color -->
        </shape>
    </item>
</layer-list>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="@color/light_grey1" />
<stroke
    android:width="1dip"
    android:color="@color/light_grey1" />

<corners
    android:bottomLeftRadius="0dp"
    android:bottomRightRadius="0dp"
    android:topLeftRadius="5dp"
    android:topRightRadius="5dp" />

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

        <solid android:color="@color/light_gray" />
        <stroke
            android:width=".5dp"
            android:color="@color/dark_gray" />
    </shape>
</inset>
    <?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:width="1dp"
                    android:color="@color/grey_coaching_text" />
            </shape>
        </item>

        <item
            android:bottom="1dp"
            android:top="1dp">
            <shape android:shape="rectangle">
                <solid android:color="@color/white" />
            </shape>
        </item>
    </layer-list>
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/your_color"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="@+id/textView"
        app:layout_constraintStart_toStartOf="@+id/textView" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:gravity="center"
        android:text="Testing"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/your_color"
        app:layout_constraintEnd_toEndOf="@+id/textView"
        app:layout_constraintStart_toStartOf="@+id/textView"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

</android.support.constraint.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:left="-2dp" android:right="-2dp">
            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="#000000" />
            </shape>
        </item>
    </layer-list>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--Minus (-) how much dp you gave in the stroke width from left right-->
    <item android:left="-10dp" android:right="-10dp">
        <shape
            android:shape="rectangle">
            <stroke android:width="10dp" android:color="@android:color/holo_red_dark" />
           <!--This is the main background -->
            <solid android:color="#FFDDDDDD" />
        </shape>
    </item>
</layer-list>