Android Studio图像资产启动器图标透明背景颜色

Jay*_*ani 19 android uiimageasset android-studio-3.1

你可能会想这个问题是一个重复一个.但从那时起,Android Studio已经更新,并且在那里提供的解决方案不再适用.

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

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

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

这个这个

但这些都不适合我.

尝试的解决方案:

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

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

qtm*_*fld 43

Android 8.0 Oreo(API级别26)引入了自适应启动器图标,它由两层组成:前景和背景.材料设计指南声明背景图层在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或更高版本的启动器图标必须具有不透明的背景颜色,但7.1或更低版本的其他传统启动器图标可以恢复为透明背景颜色,如果您可以省略应用程序中的圆形启动器图标.

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

步骤1

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

  • Mip映射anydpi-V26/ic_launcher.xml
  • Mip映射anydpi-V26/ic_launcher_round.xml

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

  • 绘制/ ic_launcher_background.xml
  • 可绘制-V24/ic_launcher_foreground.xml

第2步


更新#1:

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

Android 8.1中的主屏幕(Nexus 5X) Android 8.1中的最近屏幕(Nexus 5X)


更新#2:

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

在Nexus 5X设备中(Android 8.1)

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

在Nexus 5模拟器(Android 8.1)中

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

  • 屏幕不透明
  • 在" 最近"屏幕中透明
  • 所有应用程序屏幕中都不透明

Nexus 5仿真器中的Home,AllApps和Recents屏幕

在一些发射器应用程序中的不透明白色背景

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

  • com.google.android.launcher Google Now Launcher
  • com.google.android.apps.nexuslauncher 像素启动器

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

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

Launcher3源代码

在Launcher3 的git branch 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;
}
Run Code Online (Sandbox Code Playgroud)

该标志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;
Run Code Online (Sandbox Code Playgroud)

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

背景颜色

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

<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>
Run Code Online (Sandbox Code Playgroud)

颜色legacy_icon_backgroundcolors.xml中定义

<color name="legacy_icon_background">#FFFFFF</color>
Run Code Online (Sandbox Code Playgroud)

因此,背景颜色变为白色.

  • +1是为您的努力工作的人。我已从mipmap-anydpi-v26删除资源,并且正在尝试在具有Android 8.1的nexus 5模拟器上使用app。但它仍然给出相同的输出。在圆形徽标中有白色背景。顺便说一句,非常感谢您的大力支持。 (3认同)

Ali*_*a K 10

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

  1. 首先,(Adaptive and Legacy)从 Image Asset创建一个启动器图标:选择一个image背景层并将其调整为 0% 或 1% 并将在传统选项卡中设置shapenone

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

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

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


Coo*_*ind 9

在Android 5.0中,在我创建透明文件之前,图标始终具有不透明的背景。

  1. 文件>新建>图片资产。
  2. 转到Launcher Icons (Adaptive and Legacy)Icon Type
  3. 选择ImageAsset Type选择照片中的Path字段(Foreground Layer标签)。
  4. 在透明背景下512x512像素大小(此大小为ic_launcher-web.png)的PNG文件下创建或下载。
  5. Background Layer选项卡中选择ImageAsset Type与来自步骤4装入透明背景。
  6. Legacy选项卡上选择Yes的所有GenerateNoneShape
  7. Foreground LayerBackground Layer选项卡中,您可以更改修剪尺寸。

尽管您会在Preview窗口中的图像后面看到黑色背景,但是在按和编译应用程序后NextFinish您将在Android 5和Android 8中看到透明背景。

是透明图像:

在此处输入图片说明

  • 不......图标周围有一个黑色轮廓,看起来很奇怪 (2认同)