编辑的解决方案将使您的 SplashScreen 在所有 API(包括 API21 到 API23)上看起来都很棒
首先阅读这篇文章并按照制作启动画面的好方法。
如果您的徽标变形或不适合并且您只针对 APIs24+,您可以直接在其 xml 文件中按比例缩小矢量可绘制对象,如下所示:
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="640"
android:viewportHeight="640"
android:width="240dp"
android:height="240dp">
<path
android:pathData="M320.96 55.9L477.14 345L161.67 345L320.96 55.9Z"
android:strokeColor="#292929"
android:strokeWidth="24" />
</vector>
在上面的代码中,我将在 640x640 画布上绘制的可绘制对象重新缩放为 240x240。然后我就像这样把它放在我的启动画面中,效果很好:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"
android:paddingBottom="20dp" android:paddingRight="20dp" android:paddingLeft="20dp" android:paddingTop="20dp">
<!-- The background color, preferably the same as your normal theme -->
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item
android:drawable="@drawable/logo_vect"
android:gravity="center">
</item>
</layer-list>
我的代码实际上只是在底部的图片中绘制三角形,但在这里你可以看到你可以用它来实现什么。与使用位图时得到的像素化边缘相比,分辨率终于很好了。所以一定要使用可绘制的矢量(有一个名为 vectr 的网站,我用它来创建我的网站,而无需下载专门的软件)。
编辑以使其也适用于 API21-22-23
虽然上述解决方案适用于运行 API24+ 的设备,但在将我的应用程序安装到运行 API22 的设备后,我感到非常失望。我注意到启动画面再次试图填满整个视图并且看起来像狗屎。撕了半天的眉毛后,我终于凭借纯粹的意志力强行解决了。
您需要创建第二个文件,其名称与 splashscreen xml 完全相同(比如说 splash_screen.xml),并将其放入您将在 res/ 文件夹中创建的 2 个名为 drawable-v22 和 drawable-v21 的文件夹中(以便您查看它们必须将您的项目视图从 Android 更改为 Project)。这用于告诉您的手机在相关设备运行与可绘制文件夹中的 -vXX 后缀相对应的 API 时重定向到放置在这些文件夹中的文件,请参阅此链接。将以下代码放在您在这些文件夹中创建的 splash_screen.xml 文件的图层列表中:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme -->
<item
android:gravity="center">
<shape android:shape="rectangle">
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item
android:gravity="center">
<bitmap
android:gravity="center"
android:src="@drawable/logo_vect"/>
</item>
</layer-list>
由于这些 API 的某些原因,您必须将您的可绘制对象包装在位图中以使其工作并喷射最终结果看起来相同。问题是您必须使用带有附加可绘制文件夹的方法,因为 splash_screen.xml 文件的第二个版本将导致您的启动屏幕在运行 API 高于 23 的设备上根本不显示。您可能还必须放置splash_screen.xml 的第一个版本到 drawable-v24 中,因为 android 默认为它可以找到资源的最近的 drawable-vXX 文件夹。