如何在图层列表中设置可绘制的大小

Dei*_*mos 30 size android list drawable android-layout

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

Drawable1比Drawable2大,因此Drawable2会调整大小.如何覆盖它并设置Drawable2的原始大小?我不希望它调整大小.我尝试设置宽度和高度,但这不起作用.drawables实际上并不是位图,它们是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>
Run Code Online (Sandbox Code Playgroud)

小智 6

您可以为此使用插入标签。例如

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

这将在您的 menu_drawable2 周围创建填充,因此它不会被缩放。只需设置您需要的尺寸。


MrO*_*zko 6

您可以使用具有所需值的android:widthandroid:height参数.

下面是示例可绘制图层列表和屏幕截图.我使用了google 材料图标中的矢量drawable 和自己的选择器drawable.

原始的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>
Run Code Online (Sandbox Code Playgroud)

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

屏幕截图

  • 免责声明:宽度和高度均为API 23+ (24认同)
  • 我将用于下面的23? (12认同)

ray*_*rks 5

我也在 Android 5.0 (API 21) 上遇到了这个问题。看来of不适用于小于 23 的gravityAPIitem。因此需要更新布局,我通过为第二个项目节点应用计算的填充来使其兼容,该节点应该是右上对齐的覆盖层。

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


Akh*_*mar 0

希望这会有所帮助:-
您可以使用九个补丁可绘制的menu_drawable2. 您可以menu_drawable2在其边缘周围设置透明区域。使用此透明区域指定九个面片中的可拉伸区域。