如何在线性布局周围添加边框,但底部除外?

67
如何在线性布局周围添加边框,但底部除外? LinearLayout需要在左侧、顶部和右侧具有边框,但底部不需要。
4个回答

171
在drawable文件夹中创建一个名为border.xml的XML文件,并将以下代码放入其中。
 <?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" android:right="5dp"  android:top="5dp" >  
     <shape android:shape="rectangle"> 
      <solid android:color="#000000" />
    </shape>
   </item>    
 </layer-list> 

然后像这样在你的线性布局中添加一个背景:

         android:background="@drawable/border"

编辑:

该XML文件已在运行GingerBread 2.3.3的三星Galaxy S上进行了测试,并像下图所示完美运行:

enter image description here

此外,

也已在运行JellyBean 4.1.2的三星Galaxy S 3上进行了测试,并像下图所示完美运行:

enter image description here

最后,在所有API上都能够完美工作。

编辑2 :

使用以下代码可以通过描边方式将背景保持透明,同时保持除底部外的边框。

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

希望这可以帮助。


2
这个对你可行吗?我已经测试过并且可以运行,麻烦你检查一下。 - Android Stack
2
还有什么需要补充的吗?对我没有用。下面的另一个答案可行。 - shim
@Noman,它与所有API完美配合,检查更新答案。 - Android Stack
2
用透明的矩形加上红色边框怎么样? - Hanry
3
@hanry,你可以用另一种方式来完成,参考编辑2。 - Android Stack
显示剩余5条评论

57

保存此xml文件并将其添加为线性布局的背景...

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="4dp" android:color="#FF00FF00" /> 
    <solid android:color="#ffffff" /> 
    <padding android:left="7dp" android:top="7dp" 
            android:right="7dp" android:bottom="0dp" /> 
    <corners android:radius="4dp" /> 
</shape>
希望这能帮到你! :)

这必须是被接受的答案。在Nexus 5 5.1.1上运行良好。 - hash
我尝试了这个解决方案,但底部的边框还在吗? - Sam

22

肯尼是对的,我只想澄清一些事情。

  1. 创建文件border.xml并将其放置在文件夹res/drawable/中。
  2. 添加代码:

  3. <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
       <stroke android:width="4dp" android:color="#FF00FF00" /> 
       <solid android:color="#ffffff" /> 
       <padding android:left="7dp" android:top="7dp" 
            android:right="7dp" android:bottom="0dp" /> 
       <corners android:radius="4dp" /> 
    </shape>
    
  4. 在需要边框的地方,像这样设置背景:android:background="@drawable/border"

我的首次尝试失败是因为我把 border.xml 放错了文件夹!


2
这是一个轻量级且易于集成的库,可以让您随心所欲地为任何小部件玩转边框,仅基于FrameLayout小部件。这里有一个Github链接,您可以在链接中找到更多信息。下面是一个快速示例代码,让您了解它有多容易。
<com.khandelwal.library.view.BorderFrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:leftBorderColor="#00F0F0"
            app:leftBorderWidth="10dp"
            app:topBorderColor="#F0F000"
            app:topBorderWidth="15dp"
            app:rightBorderColor="#F000F0"
            app:rightBorderWidth="20dp"
            app:bottomBorderColor="#000000"
            app:bottomBorderWidth="25dp" >
    </com.khandelwal.library.view.BorderFrameLayout>

所以,如果您不想在底部有边框,请删除此自定义小部件中有关底部的两行内容,就完成了。
不,我既不是这个库的作者,也不是他的朋友;-)

这就是我一直在寻找的东西 :) - dens14345

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接