NativeScript应用启动图标跨Android设备形状适配问题咨询
解决NativeScript图标在Android自适应设备上的差异化显示问题
这个问题其实是Android 自适应图标(Adaptive Icons) 特性带来的——从Android 8.0(API 26)开始,系统支持根据设备设计规范自动调整图标形状(比如Pixel系列的圆形),而NativeScript默认的tns resources generate icons生成的是传统方形图标,自然会被系统强制裁剪成圆形,留下难看的白边。
要实现「支持自适应的设备显示适配形状,其他设备显示方形」的需求,我们可以利用Android的自适应图标机制,配合NativeScript的资源配置来搞定,具体步骤如下:
1. 准备自适应图标资源
自适应图标分为前景层和背景层:
- 前景层:只保留你的图标核心内容(比如logo),去掉方形背景,确保核心区域在中间(避免被系统裁剪),建议尺寸至少1024x1024px。
- 背景层:可以是纯色、渐变或者简单图案,用来填充系统的图标形状区域,尺寸同样1024x1024px。
你可以用Android Studio的「Image Asset Studio」工具快速生成各分辨率的前景/背景图标,或者自己用设计工具导出不同dpi的版本:
- mdpi: 48x48px(前景)/ 108x108px(背景)
- hdpi: 72x72px / 162x162px
- xhdpi: 96x96px / 216x216px
- xxhdpi: 144x144px / 324x324px
- xxxhdpi: 192x192px / 432x432px
2. 配置NativeScript的Android资源目录
在你的项目App_Resources/Android/src/main/res下做以下操作:
- 确保存在
mipmap-mdpi、mipmap-hdpi、mipmap-xhdpi、mipmap-xxhdpi、mipmap-xxxhdpi这几个分辨率文件夹,没有就新建。 - 将对应分辨率的前景图标命名为
ic_launcher_foreground.png,背景图标命名为ic_launcher_background.png,分别放入对应的mipmap文件夹中。 - 新建
mipmap-anydpi-v26文件夹,在里面创建ic_launcher.xml文件,内容如下:<?xml version="1.0" encoding="utf-8"?> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <background android:drawable="@mipmap/ic_launcher_background" /> <foreground android:drawable="@mipmap/ic_launcher_foreground" /> </adaptive-icon> - 在各个mipmap文件夹中保留原来的方形
ic_launcher.png(或者重新导出适配低版本的方形图标),供API 25及以下的设备使用。
3. 确认AndroidManifest配置
打开App_Resources/Android/src/main/AndroidManifest.xml,确保<application>标签的android:icon属性指向@mipmap/ic_launcher:
<application android:name="com.tns.NativeScriptApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" ...>
4. 测试效果
运行tns run android到你的Pixel XL模拟器(API 28),此时系统会自动加载自适应图标:背景填充圆形区域,前景居中显示,不会有白边;而在不支持自适应图标的设备(比如API 25及以下,或者非Pixel系列设备),则会显示你原来的方形图标,完美实现差异化适配。
内容的提问来源于stack exchange,提问作者Michał Danek
相关产品推荐
相关产品推荐

