Android XML图层列表:如何定位顶部图层

8
我有一个XML drawable - tab_background_unselected:
<?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/background_grey" />            
        </shape>
    </item>

</layer-list>

这段代码生成了如下形状:

背景矩形

并且这段箭头形状的xml可绘制代码 - tab_selected_arrow:

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

    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%"
            android:toDegrees="45" >
            <shape android:shape="rectangle" >
                <solid android:color="@color/background_dark_green" />
            </shape>
        </rotate>
    </item>

</layer-list>

这将创建以下形状:

顶层三角形

我使用此可绘制的XML(而不是PNG文件)来创建一个图层列表:

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

    <item android:drawable="@drawable/tab_background_unselected">
    </item>
    <item android:drawable="@drawable/tab_selected_arrow">
    </item>

</layer-list>

但我希望最终的图片看起来像这样:

final image

我不知道如何将箭头(第二个图层和顶层)的重心设置为中心|底部... 我尝试使用 bitmap 标签,但它只接受图像文件。

我需要将其作为 XML drawable,因为

  1. 我需要它在 drawable 选择器中
  2. 我不想将其制作为 PNG 并为每个屏幕分辨率创建不同的文件
1个回答

9

item内使用一个内部的Bitmap可绘制对象,并为其设置gravity属性:

<item android:drawable="@drawable/tab_background_unselected">
</item>
<item>
    <bitmap
        android:gravity="bottom|center_horizontal"
        android:src="@drawable/tab_selected_arrow" />
</item>

2
Asaf说他尝试使用位图drawable,他是正确的:它们不允许XML drawable(我刚刚纠正了问题,现在"I've tried using..."中的"bitmap"标签出现了)。 - Jose_GD
据我所知,API 21-22存在一个错误,这里的位图元素中没有矢量图。 :( - djdance
2
应更加突出: 仅当“tab_selected_arrow”为.png格式时,此答案才有效! - superuser

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