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

时间:2018-04-01 11:56:04

标签: android android-studio-3.1 uiimageasset

您可能认为此问题与this一个问题重复。但从那时起,Android Studio已经更新,并且在那里提供的解决方案不再适用。

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

在尝试使用图片资源设置我的应用徽标时,我遇到了一个问题: 我不能保持app logo的背景透明。

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

  

thisthis

但这些都不适合我。

尝试过的解决方案:

  1. 通过将形状设置为无
  2. 删除 ic_launcher_background 文件的默认位置
  3. 尝试使用不同的设备
  4. 这些都不起作用......请帮助我。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:32)

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或更高版本的启动器图标必须具有不透明的背景颜色,但7.1或更低版本的其他传统启动器图标可以恢复为透明背景颜色,如果您可以从应用中省略round launcher icons

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

    STEP 2

    更新#1:

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

    Home screen in Android 8.1 (Nexus 5X) Recents screen in 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。背景颜色在最近屏幕中可以是透明的,如下面的屏幕截图所示:

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

    Home, AllApps and Recents screens in Nexus 5 emulator

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

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

    • com.google.android.launcher Google Now Launcher
    • com.google.android.apps.nexuslauncher Pixel Launcher

    相比之下,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创建一个新的自适应启动器图标,现有的旧图标将成为其前景层。根据{{​​3}}:

    ,背景图层是可绘制的:@color/legacy_icon_background
    <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_backgroundthe resource XML file

    中定义
    <color name="legacy_icon_background">#FFFFFF</color>
    

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

答案 1 :(得分:8)

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

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

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

Here是透明图像:

  

enter image description here

答案 2 :(得分:0)

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

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

在使用Photoshop创建512x512px图标后,我使用this site。您不仅可以为Android应用程序提供Android图标等等,而且它是免费的。图标被正确缩放,命名,并放置在zip文件的android文件夹下的mipmap文件夹中。您只需在下载并复制并粘贴后解压缩文件。我至少制作了50个图标,从未出现过问题。

答案 3 :(得分:0)

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

  1. 首先,从Image Asset创建启动器图标(Adaptive and Legacy): 选择一个image作为背景图层,并将其大小调整为0%或1%,然后 在旧标签中,将shape设置为none

  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)等某些设备会自动添加白色背景,无法执行任何操作。