2012-03-28 222 views
38

行我使用的是可绘制作为一个TextView的背景正好有文字下方的分隔线。一个与此绘制的XML achivied它:形状绘制为背景,在底部

<?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="#FFDDDDDD" /> 
      <gradient 
       android:angle="0" 
       android:startColor="#FFAAAAAA" 
       android:endColor="#FFEEEEEE" 
       /> 
     </shape> 
    </item> 

    <item android:bottom="2dp"> 
     <shape 
     android:shape="rectangle"> 
      <solid android:color="#FF000000" /> 
     </shape> 
    </item> 

</layer-list> 

但这种方法绘制上面一个黑色的矩形彩色矩形。我想只在没有黑色矩形的形状底部划线,因为黑色不透明。我怎么能做到这一点?

+0

好像矫枉过正。为什么不使用彩色视图? – dmon 2012-03-28 21:19:38

+0

同样适用 - 我将如何在该视图的底部添加细线? – ZoolWay 2012-03-28 21:29:58

+2

这就是我的意思,视图是线。 '<查看机器人:的backgroundColor =“#FF000000”机器人:layout_height =“2DP”机器人:layout_width =“FILL_PARENT” />' – dmon 2012-03-28 21:56:43

回答

27

一般情况下,我尝试乱七八糟尽量少与背景,除非绝对必要,因为这样做将覆盖有状态的默认背景颜色集中,压,等我建议只使用一个额外的视图(垂直LinearLayout),它和你需要的一样厚。例如:

<View 
     android:background="#FF000000" 
     android:layout_height="2dp" 
     android:layout_width="fill_parent"/> 
+7

嗯,我不是很相信你的解决方案,因为它需要额外的布局和额外的观点,都是重对象只是一个水平线...如果你们对背景过敏,为什么不重写onDraw()并画出一条线? – rupps 2013-05-08 18:03:44

+4

这是肮脏的解决方法 – ruX 2014-01-27 14:58:38

+0

ahahahahaha很简单,很明显。我尝试过没有成功做一个简单的底线背景。为什么我不这么认为?谢谢 – pablobaldez 2014-12-30 20:17:51

158

这就是我如何在底部得到一条线。绘制笔画,但再向上转移项目和两侧,以获得顶部与侧面以不显示行程:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:top="-6dp" android:left="-6dp" android:right="-6dp"> 
     <shape> 
      <solid android:color="#2b7996"/> 
      <stroke android:color="#33b5e5" android:width="6dp"/> 
     </shape> 
    </item> 
</layer-list> 
+14

这应该是IMO接受的答案,因为它可以直接解决问题。 – Abhishek 2014-09-01 10:44:28

+0

我听起来像OP希望避免在实体区域出现颜色。情况就是如此。使用#00000000,实体可以是透明的,而不是#2b7996。一个8位十六进制值指定前两位数字的字母。 – 2015-09-18 19:35:30

+0

辉煌的解决方法:) – eMich 2015-09-24 21:25:54

9

我认为这是更好的解决方案:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:gravity="bottom"> 
     <shape> 
      <size android:height="1dp" /> 
      <solid android:color="#000000" /> 
     </shape> 
    </item> 
</layer-list> 
+0

该解决方案几乎适用于除三星棒棒糖外的所有设备。整个视图用“solid”标签中提供的颜色绘制。由于三星的市场份额,这不应该被忽略。 – 2017-05-18 12:35:58

1

有了这个解决方案,其中过你需要不同的路线。我的要求只是强调。即使你可以给布局以不同的颜色。你可以看到下面的图片,白线enter image description here

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

<item android:top="-5dp" android:left="-5dp" android:right="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/white" android:width="5dp"/> 
    </shape> 
</item> 

<item android:top="-5dp" android:bottom="-5dp" android:right="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/colorPrimaryDark" android:width="5dp"/> 
    </shape> 
</item> 

<item android:bottom="-5dp" android:left="-5dp" android:right="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/colorPrimaryDark" android:width="5dp"/> 
    </shape> 
</item> 

<item android:top="-5dp" android:left="-5dp" android:bottom="-5dp"> 
    <shape> 
     <solid android:color="@android:color/transparent"/> 
     <stroke android:color="@color/colorPrimaryDark" android:width="5dp"/> 
    </shape> 
</item> 

<item android:bottom="2dp" android:left="5dp" android:right="5dp" android:top="5dp"> 
    <shape> 
     <solid android:color="@color/colorPrimary"/> 

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

</item> 

2

通常对于类似的任务 - 我创建的图层列表绘制像这样的:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/underlineColor"/> 
    </shape> 
</item> 
<item android:bottom="3dp"> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/buttonColor"/> 
    </shape> 
</item> 

的想法是首先你用underlineColor绘制矩形,然后在这个矩形的顶部用另一个实际的buttonColor绘制矩形,但应用bottomPadding。它始终有效。

但是,当我需要有buttonColor是透明的,我可以不使用上述绘制。我发现多了一个解决方案

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="@android:color/transparent"/> 
    </shape> 
</item> 

<item android:drawable="@drawable/white_box" android:gravity="bottom" android:height="2dp"/> 
</layer-list> 

(你可以在这里看到mainButtonColor是透明的,white_box仅仅是一个简单的矩形绘制与白色固体)

+0

'android:gravity =“bottom”'需要min API 23工作。 – 2017-11-20 08:04:55