你可以使用一个矢量图像作为Android与Cordova的自适应图标吗?

bnlyeluc  于 2023-06-30  发布在  Android
关注(0)|答案(1)|浏览(160)

我有一个用Cordova原生构建的Android应用程序,以前使用PNG图像作为图标,我们试图将其转换为自适应图标。完全披露-我很少使用Android Studio,但可以根据需要使用。Cordova的文档(https://cordova.apache.org/docs/en/latest/config_ref/images.html#android)显示自适应图标引用多个图像文件:

<platform name="android">
  <icon background="res/icon/android/ldpi-background.xml" density="ldpi" foreground="res/icon/android/ldpi-foreground.xml" src="res/android/ldpi.png" />
  <icon background="res/icon/android/mdpi-background.xml" density="mdpi" foreground="res/icon/android/mdpi-foreground.xml" src="res/android/mdpi.png" />
  <icon background="res/icon/android/hdpi-background.xml" density="hdpi" foreground="res/icon/android/hdpi-foreground.xml" src="res/android/hdpi.png" />
  <icon background="res/icon/android/xhdpi-background.xml" density="xhdpi" foreground="res/icon/android/xhdpi-foreground.xml" src="res/android/xhdpi.png" />
  <icon background="res/icon/android/xxhdpi-background.xml" density="xxhdpi" foreground="res/icon/android/xxhdpi-foreground.xml" src="res/android/xxhdpi.png" />
  <icon background="res/icon/android/xxxhdpi-background.xml" density="xxxhdpi" foreground="res/icon/android/xxxhdpi-foreground.xml" src="res/android/xxxhdpi.png" />
</platform>

我知道Android想要一个类似于SVG的“矢量可绘制”图像,我可以将SVG转换为该格式。然而,Android(https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive)的文档似乎要求108 dp x 108 dp的单个矢量图像。我不太确定“dp”是什么意思,但我假设它是向量的相对坐标系。
令我困惑的是,Android文档要求108 dp x 108 dp的单个矢量,但Cordova文档显示链接6个单独的XML文件(矢量可绘制图像)。为什么你需要6个不同的矢量图像?这不是违背了初衷吗谁能做这项工作的人澄清这6个不同的图像文件在Cordova的Andoid的预期?谢谢!

fdx2calv

fdx2calv1#

我已经让它工作了,但是Cordova文档有点不清楚,“cordova准备”步骤似乎有点错误。
您只需要一个矢量可绘制前景图标,它(如您所说)可以从SVG生成。这应该是108 x 108个单位,并且应该有一个18个单位的安全区边界。对于背景,我使用了纯色,但你应该能够使用一个单一的矢量绘制太多。
在每一行中重复它的原因似乎是后备PNG * 确实 * 需要对每一行都不同(因为它总是这样)。
有几件事需要注意(至少在写作时)。
1.如果你 * 正在 * 使用纯色背景,你必须调用你的颜色资源文件任何东西 * 除了 * colors.xml(与cordova文档所说的相反)。否则,它会删除自动生成的原生android colors.xml,cordova会给予你一条关于“text cannot be null”的神秘消息。例如,我的是这样指定的:

<resource-file src="res/values/droidcolors.xml" target="/app/src/main/res/values/droidcolors.xml" />

文件的内容应该遵循cordova文档,即

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="background">#51c5d6</color>
</resources>

注意,如果(像我一样)你最初把这个文件命名为colors.xml,那么一旦你重命名它,你就必须删除并重新添加android平台。
1.同样与cordova文档相反(或者至少没有提到),如果你使用的是矢量可绘制的前景图标,那么你必须还指定一个单色矢量图标,否则你的前景图标将不会被使用(应用程序将退回到使用PNG src属性)。
在我看来,这看起来像是cordova-android/lib/prepare.js使用的逻辑中的一个错误,特别是因为没有错误或警告发出,但至少解决方法很容易。也许我只是误解了事情。
不管怎样,这是为我工作的配置:

<icon background="@color/background" density="ldpi" foreground="res/icon/android/drawable/ic_launcher.xml" monochrome="res/icon/android/drawable/ic_launcher-monochrome.xml" src="res/icon/android/mipmap-ldpi/ic_launcher.png" />
<icon background="@color/background" density="mdpi" foreground="res/icon/android/drawable/ic_launcher.xml" monochrome="res/icon/android/drawable/ic_launcher-monochrome.xml" src="res/icon/android/mipmap-mdpi/ic_launcher.png"/>
<icon background="@color/background" density="hdpi" foreground="res/icon/android/drawable/ic_launcher.xml" monochrome="res/icon/android/drawable/ic_launcher-monochrome.xml" src="res/icon/android/mipmap-hdpi/ic_launcher.png"/>
<icon background="@color/background" density="xhdpi" foreground="res/icon/android/drawable/ic_launcher.xml" monochrome="res/icon/android/drawable/ic_launcher-monochrome.xml" src="res/icon/android/mipmap-xhdpi/ic_launcher.png"/>
<icon background="@color/background" density="xxhdpi" foreground="res/icon/android/drawable/ic_launcher.xml" monochrome="res/icon/android/drawable/ic_launcher-monochrome.xml" src="res/icon/android/mipmap-xxhdpi/ic_launcher.png"/>
<icon background="@color/background" density="xxxhdpi" foreground="res/icon/android/drawable/ic_launcher.xml" monochrome="res/icon/android/drawable/ic_launcher-monochrome.xml" src="res/icon/android/mipmap-xxxhdpi/ic_launcher.png"/>

(在做这个的时候,我发现一些有用的开发人员已经打包了vd-tool,android studio使用它将svgs转换为android drawable格式作为CLI二进制文件。有各种各样的版本,但Alex Lockwood的版本对我来说很有效。它节省了大量的时间,而不必打开Studio只是为了转换svg。

相关问题