如何让重力'底部'在xml中绘制一个drawable

时间:2012-01-12 14:43:36

标签: android xml drawable

我有一个简单的目标。我想在我的FrameLayout上有一个浅灰色的背景,下面有一条黑色分界线(只有底层,而不是四周)。到目前为止,我有这个:

<?xml version="1.0" encoding="utf-8"?>
   <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
   <item>
    <shape android:shape="rectangle" android:gravity="center">
        <solid android:color="#EEEEEE" />   
    </shape>
   </item>
   <item>
   <shape android:shape="line" android:gravity="bottom" >
       <stroke android:width="1dip" android:color="#010101"/>
   </shape>
   </item>
   </layer-list>

但是它通过中心绘制线条,即忽略重力='底部'位。我该如何解决这个问题?

编辑:这个问题非常旧。所选答案可能与当前API等符合也可能不符合。建议您开始自己的问题,而不是添加到不再受监控的问题中。

7 个答案:

答案 0 :(得分:27)

我也很努力。基本上,要在底部创建边框,您必须从与预期相反的方向思考。您从带有边框颜色的矩形开始。最重要的是,您绘制实际颜色,从底部偏移。 我用这个:

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

    <!-- CREATE A RECTANGLE WITH YOUR BORDER COLOR -->
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#fff"/>
        </shape>
    </item>

    <!-- NOW DEFINE THE NORMAL COLOR-->
    <item android:bottom="BOTTOM_BORDER_THICKNESS E.G. 4dp">
        <shape android:shape="rectangle" >
            <solid android:color="#ccc"/>
        </shape>
    </item>
</layer-list>

或者,正如Juan Pablo Saraceno建议:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
        <color android:color="YOUR_BORDER_COLOR" /> 
    </item> 
    <item android:top="YOUR_BORDER_THICKNESS"> 
        <color android:color="YOUR_BG_COLOR" /> 
    </item> 
</layer-list>

答案 1 :(得分:17)

不幸的是,我还没有找到一种方法让引力可以用于绘制,但我发现你可以用纯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="0dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <solid android:color="#EEEEEE"/>
            <stroke android:width="1dp" android:color="#010101"/>
        </shape>
    </item>
</layer-list>
祝你好运:)

答案 2 :(得分:4)

我建议使用9补丁图像 - 这是一个应该做的工作的例子:

Example nine-patch image

(它很小但它就在那里!)

如果将它放在drawable文件夹中并将FrameLayout的背景设置为它,那么你应该得到所需的结果。内容将进入灰色区域,#010101像素将水平拉伸以在底部形成一条线。只需确保保留.9.png扩展名,以确保它作为九补丁加载。

希望能帮到你

答案 3 :(得分:3)

这有效!

<item>
      <bitmap
         android:gravity="left|bottom"
         android:src="@drawable/myDrawable" />
 </item>

答案 4 :(得分:1)

<?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/Black" />
        </shape>
    </item>
    <item android:bottom="5dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/White" />
        </shape>
    </item>

</layer-list>

答案 5 :(得分:1)

嗯,这是一个非常古老的问题,但没有一个答案似乎回答了实际的问题(如何使gravity工作)所以这是一个有效的例子:

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

    <item>
        <color android:color="#2196F3"/>        <!-- Background color -->
    </item>

    <item android:gravity="bottom">
        <shape>
            <size android:height="10dp" />      <!-- I would suggest 1dp -->
            <solid android:color="#F50057" />   <!-- Line color -->
        </shape>
    </item>
</layer-list>

通过类比,如果您想使用重力leftright将属性height更改为width

答案 6 :(得分:0)

我知道这个问题非常古老,但给出的答案并不适合我。结果是为了重力属性工作,您只需要在可绘制项目中添加大小标记。

以下将按预期工作:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:gravity="center">
        <shape android:shape="rectangle">
            <solid android:color="#EEEEEE" />
        </shape>
    </item>
    <item
        android:gravity="bottom">
        <shape android:shape="line">
            <size android:height="2dp"/>
            <stroke android:width="1dip" android:color="#010101"/>
        </shape>
    </item>
</layer-list>

PS。此功能在api级别23中添加 https://developer.android.com/reference/android/graphics/drawable/LayerDrawable#setLayerGravity%28int,%20int%29