如何在图层列表中为位图和颜色添加填充?

31

我需要使用layer-list创建一个drawable,其中背景层是图像,前景是透明颜色。我已经能够做到这一点。但我没有成功地添加一些填充/边距,以便在底部显示一小段图像而不被上面的有色层覆盖。以下是我的xml代码。谢谢帮忙。

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

  <item>
    <shape
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="rectangle" >
      <solid android:color="@color/color1" />
      <padding android:bottom="20dp" />
    </shape>
  </item>

</layer-list>

由于这个配置不起作用,我猜测要把填充放在第一层中。但是我不确定如何在位图中实现这一点。

4个回答

72

shape 元素的底部填充移动到父元素 item 上:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item>
    <bitmap android:src="@drawable/img1" />
  </item>
  <item android:bottom="20dp">
    <shape android:shape="rectangle" >
      <solid android:color="@color/color1" />
    </shape>
  </item>
</layer-list>

查看http://idunnolol.com/android/drawables.html#layer-list以获取更多信息。


如果您的纯色位于位图之前,请在第二个项目标记后设置位图。 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:bottom="20dp" android:left="40dp" android:right="40dp" android:top="20dp"> <shape android:shape="rectangle"> <solid android:color="@color/colorPrimary" /> </shape> </item> <item> <bitmap android:src="@drawable/splash_screen_logo" /> </item></layer-list> - Adarsh Vijayan P

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

    <item>
        <shape android:shape="oval">
            <solid android:color="#FFE3F5F2"/>
        </shape>
    </item>

    <item
        android:bottom="7dp"
        android:left="7dp"
        android:right="7dp"
        android:top="7dp">
        <bitmap
            android:src="@drawable/ic_link">
        </bitmap>

    </item>


</layer-list>

7
将位图包裹在内嵌的可绘制对象中,并在那里设置您的填充。

3
可以举个例子吗? - CDrosos

5
如果您将drawable添加到图层列表中的同一项中,则可以应用诸如 android:topandroid:bottomandroid:leftandroid:right 等属性来处理内边距。
我通过使用 android:widthandroid:height 属性来解决drawable与TextView不对齐的问题。
例如:
<item
    android:width="26dp" android:height="26dp"
    android:drawable="@drawable/ic_person">
    <shape android:shape="rectangle" >
        <solid android:color="@android:color/transparent" />
    </shape>
</item>


很不幸,图层列表项中的宽度和高度属性仅适用于API 23及以上版本。 - milosmns

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