我有一个简单的目标。我想在我的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等符合也可能不符合。建议您开始自己的问题,而不是添加到不再受监控的问题中。
答案 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补丁图像 - 这是一个应该做的工作的例子:
(它很小但它就在那里!)
如果将它放在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>
通过类比,如果您想使用重力left
或right
将属性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