You need to enable JavaScript to run this app. Android layer-list中如何设置item尺寸 兼容API23以下版本
优惠活动
大模型
产品
解决方案
定价
更多

Android layer-list中如何设置item尺寸 兼容API23以下版本

低版本API兼容下layer-list固定item尺寸的实现

原有方案失效的核心逻辑

  • 旧版本layer-list的item节点不支持直接配置android:width/android:height,且默认行为是让引用的drawable自动拉伸铺满整个layer边界;哪怕配置了android:gravity="center",也只是在铺满的画布上调整对齐位置,完全不会改变drawable被拉伸的实际绘制范围
  • 之前参考方案操作错误:把shape层叠在目标item上方的操作,没有给目标drawable划定独立的固定尺寸边界,自然无法阻止其拉伸铺满屏幕

全API版本兼容的实现步骤

不需要依赖API23新增的item宽高属性,利用全版本支持的BitmapDrawable尺寸约束能力实现固定尺寸:

  1. 单独创建独立drawable文件,命名如scaled_foreground.xml
  2. 在该文件中用<bitmap>标签包裹目标前景图,直接在bitmap标签上配置固定宽高值:bitmap标签上的android:width/android:height属性从API1就支持,完全没有API23的版本限制
    示例代码:
    <?xml version="1.0" encoding="utf-8"?>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@mipmap/ic_launcher_foreground"
        android:gravity="center"
        android:width="96dp"
        android:height="96dp"
        android:antialias="true"/>
    

    代码中的96dp可根据实际需求替换为目标固定尺寸值。

  3. 回到原主layer-list文件,把第二个item原本直接引用的@mipmap/ic_launcher_foreground替换为刚才创建的bitmap drawable即可,主layer-list结构无需修改
    替换后的主layer-list代码:
    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@color/blue"/>
        <item
            android:drawable="@drawable/scaled_foreground"
            android:gravity="center"/>
    </layer-list>
    

矢量图场景的替代实现

如果ic_launcher_foreground是VectorDrawable,无法直接放入bitmap标签,可以用嵌套的inset drawable实现尺寸约束,同样全API兼容:

  • 创建inset类型的drawable文件,通过固定的上下左右内边距值收缩矢量图的绘制范围,把矢量图的有效绘制区域限定为需要的固定尺寸
  • 将主layer-list中第二个item的引用替换为该inset drawable即可

内容的提问来源于stack exchange,提问作者user14536109

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 18:36:04