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尺寸约束能力实现固定尺寸:
- 单独创建独立drawable文件,命名如
scaled_foreground.xml - 在该文件中用
<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可根据实际需求替换为目标固定尺寸值。 - 回到原主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
相关产品推荐
相关产品推荐

