【问题标题】:Android Studio Image Asset Launcher Icon Transparent Background ColorAndroid Studio Image Asset Launcher 图标透明背景色
【发布时间】:2018-09-10 20:57:30
【问题描述】:

您可能会认为这个问题与this one 重复。但从那时起,Android Studio 已经更新,那里给出的解决方案不再有效。

我正在尝试使用 android studio 中的图像资产设置我的应用徽标。这是因为如果我将我的应用程序 logo 直接放在 drawable 或 mipmap 中,则会导致许多问题,例如:如果它的大小很大,则会发生应用程序崩溃,如果设备在 oreo 上运行,则不会显示 logo,并且会显示默认的 ic_launcher 等。

在尝试使用图像资产设置我的应用程序徽标时,我遇到了一个问题: 我无法保持应用徽标的背景透明。

我有一个在 Photoshop 中制作的 png 徽标,我想将其设置为我的应用程序徽标,我不想要任何背景,但 android studio 图像资产不提供任何删除背景的选项。我尝试了谷歌的以下解决方案:

thisthis

但这些都不适合我。

尝试过的解决方案:

  1. 将形状设置为无
  2. 通过从默认位置删除 ic_launcher_background 文件
  3. 在不同的设备上试过

这些都不起作用...请帮助我。任何帮助将不胜感激。

【问题讨论】:

  • 在背景层再次导入同一张图片,并设置其尺寸小于第一张图片

标签: android android-studio-3.1 uiimageasset


【解决方案1】:

Android 8.0 Oreo(API 级别 26)引入了adaptive launcher icons,它由两层组成:前景和背景。 The material design guidelines 声明 背景层在 Android O 及更高版本中必须是不透明的,您可以在以下引用的底部看到。因此,如果您的应用程序的targetSdkVersion 为 26 或更高,则适用于 Android 8.0 或更高版本的自适应启动器图标必须至少具有不透明的背景颜色。

https://material.io/guidelines/style/icons.html#icons-icons-for-android

Android 图标

Android O 及更高版本

Android O 图标在设备的主屏幕和所有应用屏幕上代表您的应用。以下指南描述了图标如何获得独特的视觉处理、动画和行为。

...

图层规格

图标由两层组成:前景和背景。每一层都可以独立于其他层进行动画处理和接收处理。

前景(滚动视差)

  • 108 x 108 dp
  • 72dp 蒙版部分
  • 建议透明度(可选)

背景(微妙的视差)

  • 108 X 108 dp
  • 72dp 蒙版部分
  • 必须是不透明的

7.1 或更低版本的解决方法

尽管 8.0 或更高版本的启动器图标必须具有不透明的背景颜色,但如果您可以在应用中省略 round launcher icons,其他 7.1 或更低版本的旧启动器图标可以恢复为透明背景颜色。

  1. 首先,创建启动器图标(自适应和旧版)。它将创建自适应启动器图标和旧版启动器图标。一开始,它们都有不透明的背景颜色。
  2. 之后,创建启动器图标(仅限旧版)。这将仅覆盖现有的旧版启动器图标,如下面的第二个屏幕截图所示。如果将shape 设置为none,它们将具有透明背景色。
  3. 在项目窗口中删除文件夹res/mipmap/ic_laucher_round
  4. 打开 AndroidManifest.xml 并从 application 元素中删除属性 android:roundIcon="@mipmap/ic_launcher_round"

在上面的左侧窗格中,以下 XML 文件定义了适用于 Android 8.0 或更高版本的自适应启动器图标。

  • mipmap-anydpi-v26/ic_launcher.xml
  • mipmap-anydpi-v26/ic_launcher_round.xml

如右侧窗格所示,它们引用以下可绘制 XML 文件。

  • drawable/ic_launcher_background.xml
  • drawable-v24/ic_launcher_foreground.xml


更新 #1:

在 Android 8.0 或更高版本中,启动器图标的背景颜色可以是透明的,如 Android 8.1 (Nexus 5X) 屏幕截图所示。示例应用“NoAdaptive”在文件夹mipmap-anydpi-v26 中没有自适应启动器图标的任何资源,而另一个应用“Adaptive”拥有该资源。


更新 #2:

虽然在 Android 8.0 或更高版本中启动器图标的背景颜色可以是透明的,但这取决于用户的启动器应用程序。一些启动器应用会将您的旧图标转换为不透明的自适应图标。

在 Nexus 5X 设备(Android 8.1)中

默认启动器应用程序是Google Now Launcher,根据其包名称com.google.android.launcher。背景颜色可以是透明的,如更新 #1 的屏幕截图所示。

在 Nexus 5 模拟器 (Android 8.1) 中

默认启动器应用程序是Pixel Launcher,根据其包名称com.google.android.apps.nexuslauncherRecents 屏幕中的背景颜色可以是透明的,如下图所示:

  • 主页屏幕不透明
  • 最近屏幕中透明
  • 所有应用屏幕不透明

某些启动器应用中的不透明白色背景

这些GMS 应用是封闭源代码:

  • com.google.android.launcher Google 即时启动器
  • com.google.android.apps.nexuslauncher 像素启动器

相比之下,AOSP apps 是开源的。 Android 中的大多数启动器应用程序都基于以下启动器应用程序的源代码:

  • com.android.launcher
  • com.android.launcher2
    • Launcher2(原始包名)
  • com.android.launcher3
    • Launcher3(适用于 Android 5.0 Lollipop 或更高版本)

Launcher3 源代码

在 Launcher3 的 git 分支 oreo-release 中,LauncherIcons.java 具有将旧版启动器图标包装在自适应启动器图标中的方法 wrapToAdaptiveIconDrawable

/**
 * If the platform is running O but the app is not providing AdaptiveIconDrawable, then
 * shrink the legacy icon and set it as foreground. Use color drawable as background to
 * create AdaptiveIconDrawable.
 */
static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable, float scale) {
    if (!(FeatureFlags.LEGACY_ICON_TREATMENT && Utilities.isAtLeastO())) {
        return drawable;
    }
    try {
        if (!(drawable instanceof AdaptiveIconDrawable)) {
            AdaptiveIconDrawable iconWrapper = (AdaptiveIconDrawable)
                    context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
            FixedScaleDrawable fsd = ((FixedScaleDrawable) iconWrapper.getForeground());
            fsd.setDrawable(drawable);
            fsd.setScale(scale);
            return (Drawable) iconWrapper;
        }
    } catch (Exception e) {
        return drawable;
    }
    return drawable;
}

标志FeatureFlags.LEGACY_ICON_TREATMENTFeatureFlags.java中定义:

// When enabled, icons not supporting {@link AdaptiveIconDrawable} will be wrapped in this class.
public static final boolean LEGACY_ICON_TREATMENT = true;

因此,旧版启动器图标的背景颜色取决于此标志,并且在某些启动器应用程序(例如 Pixel Launcher)中它可能是不透明的。

背景颜色

如果标志设置为true,则会使用R.drawable.adaptive_icon_drawable_wrapper 创建一个新的自适应启动器图标,并且现有的旧图标将成为其前景层。背景层是一个drawable:@color/legacy_icon_background,根据the resource XML file

<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/legacy_icon_background"/>
    <foreground>
        <com.android.launcher3.graphics.FixedScaleDrawable />
    </foreground>
</adaptive-icon>

颜色legacy_icon_backgroundcolors.xml中定义

<color name="legacy_icon_background">#FFFFFF</color>

所以,背景颜色变成了白色。

【讨论】:

  • 那么,在 android 8.0 及更高版本中,没有官方或棘手的方法可以使应用图标具有透明背景吗?
  • 我一直在考虑您的建议,并修改了我的答案。我希望它对你有用。
  • +1 为您付出了巨大的努力。我已经从 mipmap-anydpi-v26 中删除了资源,并且我正在使用 android 8.1 的 nexus 5 模拟器上尝试应用程序。但它仍然给出相同的输出。在我的圆形标志中有白色背景。顺便说一句,非常感谢您的大力支持。
  • 感谢您的投票,我非常感谢您的赏金。是的,你是对的。一些启动器应用程序可以为旧版启动器图标制作白色背景。我检查了当前 AOSP 启动器应用程序的源代码,并再次更新了我的答案。
  • 优秀的答案。无论如何,我没有根据您的更新 #2 测试我的应用程序,但这是很好的解释。
【解决方案2】:

在 Android 5.0 中,图标总是有一个不透明的背景,直到我创建了一个透明文件。

  1. 文件 > 新建 > 图像资源。
  2. Icon Type 中转至Launcher Icons (Adaptive and Legacy)
  3. Asset Type 中选择Image 并在Path 字段(Foreground Layer 选项卡)中选择您的图片。
  4. 在透明背景下创建或下载 512x512 像素大小的 PNG 文件(这是ic_launcher-web.png 的大小)。
  5. Background Layer 选项卡中,在Asset Type 中选择Image 并从第4 步加载透明背景。
  6. Legacy 选项卡中,为所有Generate 选择Yes,为Shape 选择None
  7. Foreground LayerBackground Layer 选项卡中,您可以更改修剪大小。

虽然您会在Preview 窗口中看到图像背后的黑色背景,但在按下NextFinish 并编译应用程序后,您将在Android 5、Android 8 中看到透明背景。

Here是透明图片:

【讨论】:

  • 不..图标周围有一个黑色轮廓,看起来很奇怪
  • @ShikharJaiswal,这很奇怪。你能发布一张图片并写下设备名称、操作系统版本吗?
【解决方案3】:

试试这个对我有用的方法:

  1. 首先,从 Image Asset 创建一个启动器图标(Adaptive and Legacy): 为背景层选择一个image 并将其调整为 0% 或 1% 和 在旧标签集 shapenone

  2. 在项目窗口中删除文件夹res/mipmap/ic_laucher_round并打开AndroidManifest.xml并从application元素中删除属性android:roundIcon="@mipmap/ic_launcher_round"

  3. mipmap-anydpi-v26 中删除ic_launcher.xml

注意:某些设备(例如 Nexus 5X (Android 8.1))会自​​动添加白色背景并且无法执行任何操作。

【讨论】:

    【解决方案4】:

    如果我没有弄错你,你有一个来自 Photoshop 文件的 512x512 像素的 png 文件,你想用它为所有必要的文件夹(mipmap-xxxhdpi 到 mipmap-mdpi)制作徽标。

    您也可以在使用 Android Studio 创建图标后使用它。我更喜欢使用 Photoshop 创建图标。

    在使用 Photoshop 创建 512x512px 图标后,我使用 this site。您不仅可以拥有适用于 Android 的图标,还可以拥有适用于 iPhone 应用等的图标,而且它是免费的。图标已正确缩放、命名并放置在 zip 文件的 android 文件夹下的 mipmap 文件夹中。下载后解压,复制粘贴。我做了至少50个图标,从来没出过问题。

    【讨论】:

    • 在使用本网站制作图标后,您是否在装有奥利奥的设备上尝试过您的应用?奥利奥的背景是透明的吗?
    • 在模拟器中确实如此。但我没有安装 Android 8.0 的实际设备。该站点的输出是您手动创建的 mipmap 文件夹和图标。它只是缩放、命名和创建所需的文件夹,而无需任何工作。
    • 你得到了 mipmap 文件夹,你没有将 png 文件保存在 assets 文件夹中。
    • 不,它不能在 oreo 上完美运行。它在徽标中显示白色背景,而我刚刚在网站上上传了具有透明背景的 png 徽标。
    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 2016-10-15
    • 2011-10-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多