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

ac_*_*ac_ 15 xml android 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>
Run Code Online (Sandbox Code Playgroud)

但是它通过中心划线,即忽略了重力='底部'位.我怎样才能解决这个问题?

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

Ent*_*eco 29

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

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

或者,正如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>
Run Code Online (Sandbox Code Playgroud)

  • 唯一的问题是我生成透支,因为你正在绘制一个带有边框颜色的完整矩形,只是用实际的矩形重绘它.没有真正的重力仍然可以获得9补丁. (6认同)
  • 这是一个非常好的答案,值得更好地定位恕我直言.我觉得有点遗憾的是,android不支持重力正确的方式,并迫使人们这样做.它对我来说甚至使用<color>标签而不是矩形,形状,所以更简单.<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> (4认同)

Igo*_*nok 17

不幸的是,我还没有找到一种方法让重力工作为drawables,但我发现你如何用纯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>
Run Code Online (Sandbox Code Playgroud)

祝好运:)


kin*_*aam 5

我建议为此使用九个补丁图像 - 这是一个应该完成这项工作的示例:

示例九块图像

(它只是很小,但它就在那里!)

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

希望能帮到你