如何在layer-list中设置可绘制对象的大小

38

我在设置layer-list中drawable的大小方面遇到了问题。我的XML如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/menu_drawable1"/>
    <item android:drawable="@drawable/menu_drawable2"/>       
</layer-list>
Drawable1比Drawable2更大,因此Drawable2被调整大小。如何覆盖这种情况并设置Drawable2的原始大小?我不想让它重新调整大小。我尝试过设置宽度和高度,但那行不通。另外,这些drawable实际上并不是位图,它们是selectos,所以我不能使用位图技巧。
看起来我已经使用"left"和"right"解决了一半的问题,但是仍然无法自动设置图像的确切大小。现在我的xml看起来是这样的:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/menu_drawable1"/>
    <item android:drawable="@drawable/menu_drawable2" android:right="150dp"/>       
</layer-list>

我真的很想了解你提到的位图技巧 :) 你是指将位图嵌入到项目标记中吗? - Ready4Android
我也觉得这个问题仍然非常相关。尽管你在底部写的技巧有所帮助。 - Igor Čordaš
5个回答

8
你可以使用具有所需值的android:widthandroid:height参数。
以下是示例图形层列表和屏幕截图。我使用来自谷歌材料图标的矢量可绘制对象和自己的选择器可绘制对象。
原始circle.xml可绘制对象形状大小为100dp x 100dp,但在drawable.xml中,我通过android:widthandroid:height参数将其覆盖为24dp x 24dp。
希望这可以帮助你!
drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/circle" android:height="24dp" android:width="24dp"/>
    <item android:drawable="@drawable/ic_accessibility_black_24dp"/>
    <item android:drawable="@drawable/ic_http_white_24dp" android:gravity="center" android:top="-3dp" android:height="5dp" android:width="5dp"/>
</layer-list>

circle.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:innerRadius="20dp" android:shape="oval">
            <solid android:color="#CCC" />
            <size android:width="100dp" android:height="100dp"/>
        </shape>
    </item>
</selector>

screen shot


33
免责声明:width和height适用于API 23及以上版本的接口。 - OldSchool4664
25
我会用什么来表示23以下的数字? - Syed Hamza Hassan

7
您可以使用插入标签来实现此功能。 例如:

您可以使用插入标签来实现此功能。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/menu_drawable1"/>
   <item>
       <inset android:drawable="@drawable/menu_drawable2"
           android:insetRight="50dp"
           android:insetTop="50dp"
           android:insetLeft="50dp"
           android:insetBottom="50dp" />
   </item>

这将在您的menu_drawable2周围创建填充,以便它不会被缩放。只需设置所需的尺寸即可。


如果您使用多个插入,则似乎会累积。确实非常令人不安。 - JohnyTex
这对我来说完全没问题,使用矢量Drawable时,其他方法都无法实现。 - WildStyle

5

我也遇到了在Android 5.0(API 21)上的问题。似乎itemgravity在API小于23的情况下不起作用。因此需要更新布局,我通过为第二个项目节点应用计算填充来实现兼容性,该节点应该是右上角对齐的叠加层。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_svg_filter_black"/>

    <item
        android:left="16dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="16dp"
        android:drawable="@drawable/ic_circle_dot_red"
    />
</layer-list>

1
对于 API 级别低于 23 的情况,您可以按照以下方式在 <shape> 对象上指定 <size>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="oval" android:tint="@color/darkDeepBlue">
            <padding android:right="2dp" android:top="2dp" android:bottom="2dp" android:left="2dp"/>
        </shape>
    </item>

    <item>
        <shape android:shape="oval" android:tint="@color/sunnyYellow">
            <size android:width="8dp" android:height="8dp"/>
        </shape>
    </item>

</layer-list>

enter image description here


0
希望这可以帮到你 :-
你可以使用九宫格可拉伸图片作为menu_drawable2。你可以让menu_drawable2在边缘周围有透明区域。使用这个透明区域来指定九宫格中可拉伸的区域。

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